CToolTipCtrl: first method

 

步驟一:

    1. 產生一 MDI 應用程式, 選擇 FormView
    2. 在對話盒中加入下列控制項
      • 按鈕
      • checkbox
      • listbox
      • static control: 將 notify 屬性改為 true
    編譯並測試執行程式

步驟二:

如果我們決定在整個應用程式中使用單一的 CToolTipCtrl 物件, 我們可以在 CMainFrame 物件中加入一個 public 的 CToolTipCtrl 成員物件 m_tooltip

在 CMainFrame 視窗成功開啟後初始化這個控制項: 在 CMainFrame::OnCreate() 函式中加入 m_tooltip.Create(this), 讓 Main Frame 視窗成為 Tooltip 視窗的父視窗, 同時啟動這個 tooltip 控制項 m_tooltip.Activate(TRUE);

在 CMainFrame (或是 CFormView 的衍生類別) 中繼承虛擬函式 PreTranslateMessage() 並加入加入下列程式碼

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
  	m_tooltip.RelayEvent(pMsg);
 	return CFrameWnd::PreTranslateMessage(pMsg);
}

步驟三:

為了替 MDI 界面中每一個 CFormView 裡的每一個控制項加上 Tool tip 的功能, 我們l利用 DDX 的功能替每一個控制項加入控制項的變數

然後在 CMyView::OnInitialUpdate() 中加入

    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.AddTool(this, "FormView");
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.AddTool(&m_static, "Static");
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.AddTool(&m_check, "Check");
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.AddTool(&m_listbox, "Listbox");
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.AddTool(&m_button, "Button");
編譯, 執行

步驟四:

由於 MDI 界面中每一個 View 視窗都可能關閉, 關閉時也應該要把剛才加入的 tooltip 移除, 所以我們在 CMyView::OnDestroy() 中加入

    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.DelTool(this);
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.DelTool(&m_static);
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.DelTool(&m_check);
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.DelTool(&m_listbox);
    ((CMainFrame *)AfxGetMainWnd())->m_tooltip.DelTool(&m_button);

編譯, 執行