24/05/2018, 17:24

Thêm tooltip cho các Control trong Visual C ++ 6.0

Tooltip là một dòng đơn chú thích hiện ra bên cạnh control khi chuột di chuyển phía trên "khu vực" của đối tượng. Tooltip thường được dùng như là một ghi chú hướng dẫn người sử dụng chức năng của đối tượng đang hướng đến. MFC hỗ trợ một lớp để thực ...

Tooltip là một dòng đơn chú thích hiện ra bên cạnh control khi chuột di chuyển phía trên "khu vực" của đối tượng. Tooltip thường được dùng như là một ghi chú hướng dẫn người sử dụng chức năng của đối tượng đang hướng đến.

MFC hỗ trợ một lớp để thực hiện công việc này. Đó là lớp CToolTipCtrl.

Các chức năng cuả lớp này chúng ta có thể tìm hiểu thêm ở MSDN, ở đây tôi chỉ ghi lại tóm tắt các hàm có thể dùng của CToolTipCtrl :

Create Creates a tool tip control and attaches it to a CToolTipCtrl object.

GetText Retrieves the text that a tool tip control maintains for a tool.

GetToolInfo Retrieves the information that a tool tip control maintains about a tool.

SetToolInfo Sets the information that a tool tip maintains for a tool.

GetToolCount Retrieves a count of the tools maintained by a tool tip control.

GetDelayTime Retrieves the initial, pop-up, and reshow durations currently set for a tool tip control.

SetDelayTime Sets the initial, pop-up, and reshow durations for a tool tip control. GetMargin Retrieves the top, left, bottom, and right margins set for a tool tip window.

SetMargin Sets the top, left, bottom, and right margins for a tool tip window. GetMaxTipWidth Retrieves the maximum awidth for a tool tip window.

SetMaxTipWidth Sets the maximum awidth for a tool tip window.

GetTipBkColor Retrieves the background color in a tool tip window. SetTipBkColor Sets the background color in a tool tip window. GetTipTextColor Retrieves the text color in a tool tip window. SetTipTextColor Sets the text color in a tool tip window. Activate Activates and deactivates the tool tip control. AddTool Registers a tool with the tool tip control. DelTool Removes a tool from the tool tip control.

HitTest Tests a point to determine whether it is within the bounding rectangle of the given tool and, if so, retrieves information about the tool.

RelayEvent Passes a mouse message to a tool tip control for processing. SetToolRect Sets a new bounding rectangle for a tool.

UpdateTipText Sets the tool tip text for a tool.

Update Forces the current tool to be redrawn.

Pop Removes a displayed tool tip window from view.

Trong phần này, tôi chỉ trình bày việc thêm tooltip cho đối tượng trên dialog (dialog - based) bởi vì việc thêm tooltip cho các đối tượng trong chế độ Document - View có thể được thực hiện thông qua String Resource.

Các bước thực hiện :

- Bước 1 : Thêm vào trong lớp của Dialog (C…Dlg) một con trỏ kiểu CToolTipCtrl :

CToolTipCtrl* m_pToolTip; 
    

- Bước 2: Trong hàm OnInitDialog(), thêm vào các dòng lệnh sau :

m_pToolTip = new CToolTipCtrl; 
    //Khai báo con trỏ kiểu CWnd để dùng trong việc thêm tooltip cho đối tượng 
    CWnd* pWnd; 
    //cấp bộ nhớ thành công 
    if (m_pToolTip) 
    { 
    //Khởi tạo con trỏ Tooltip 
    if (!m_pToolTip->Create(this)) { 
    MessageBox("Khong the tao ToolTip"); OnOK(); 
    } 
    /* 
    Nếu muốn thêm tooltip cho đối tượng IDOK thìlấy con trỏ pWnd từ IDOK */ 
    pWnd = GetDlgItem(IDOK); CRect rect; 
    //Lấy hình chữ nhật bao quanh IDOK 
    pWnd->GetClientRect(rect); 
    /*Thêm vào đối tượng tooltip một tool mới*/ 
    /* Tham số thứ nhất : con trỏ chỉ đến đối tượng cần thêm tooltip Tham số thứ hai : Chuỗi thể hiện trong tooltip 
    Tham số thứ ba : Hình chữ nhật bao quanh tooltip 
    Tham số thứ tư : Số hiệu cuả tool trong tooltip control (IDTool) */ 
    m_pToolTip->AddTool(pWnd,"Bam vao day de thoat",rect,1);
    } 
    

- Bước 3 : Thêm vào lớp CTamDlg hàm PreTranslateMessage, hàm này có tác dụng xử lý thông điệp trước khi gửi đến cửa sổ. Thông điệp phải được đưa đến cho tooltip control trước. Dùng hàm RelayEvent cuả CToolTipCtrl để làm công việc xử lý thông điệp cho tooltip.

BOOL CToolTipDlg::PreTranslateMessage(MSG* pMsg) 
    { 
      if (m_pToolTip!=NULL) 
       { 
          m_pToolTip->RelayEvent(pMsg); 
       } 
      return CDialog::PreTranslateMessage(pMsg);
    }
    
Hình ảnh minh họa khi chạy đoạn chương trình trên
0