學習VS2010 --------- 對話框的Tooltips提示編程

對話框的Tooltips提示編程

Tooltips可以針對對話框的資源進行信息提示,例如按鈕等,可以作爲在線幫助系統,在VS2010中,提供了類CMFCToolTipCtrl用於Tooltips的實現。

(1)      利用VS2010的AppWizard建立對話框模式的工程文件;

(2)      插入基類爲CMFCToolTipCtrl的擴展類CMyTooltipCtrl,目的在於生成更加直觀並帶有圖標的信息提示欄

(3)      重載CMyTooltipCtrl的虛函數GetIconSize(),OnDrawIcon(),並且重寫消息TTN_SHOW對應的函數

CSizeCMyTooltipCtrl::GetIconSize()

{

     returnCSize(32,32);

}

 

BOOLCMyTooltipCtrl::OnDrawIcon(CDC* pDC, CRect rectImage )

{

     UINT uiBmpId = 0;

     switch(m_nCurID)

     {

     case IDOK:

              uiBmpId  = IDB_OK;

              break;

     caseIDCANCEL:

              uiBmpId = IDB_CANCEL;

              break;

     }

     if(uiBmpId==0)

     {

              returnFALSE;

     }

     CMFCToolBarImages  image;

     image.Load(uiBmpId);

     image.SetSingleImage();

     image.DrawEx(pDC,rectImage,0);

     returnTRUE;

}

 

void CMyTooltipCtrl::OnTtnTooltipShow(NMHDR *pNMHDR, LRESULT*pResult)

{

     m_nCurID = CWnd::FromHandle((HWND)pNMHDR->idFrom)->GetDlgCtrlID ();

     switch(m_nCurID)

     {

     case IDOK:

              SetDescription (_T("OK 按鈕用於¨¨定當前的選擇並退出界面?"));

              break;

     caseIDCANCEL:

              SetDescription (_T("Cancel 按鈕用於取消當前的選擇並退出界面?"));

              break;

     default:

              SetDescription (_T (""));

     }

     CMFCToolTipCtrl::OnShow (pNMHDR, pResult);

}

(4)       在主程序中添加CMyTooltipCtrl定義並初始化

       m_Tooltip.Create(this);

         m_Tooltip.Activate(TRUE);

 

         CMFCToolTipInfoparam;

         param.m_bVislManagerTheme= TRUE;

         m_Tooltip.SetParams(&param);

 

         m_Tooltip.AddTool(GetDlgItem(IDOK),_T("Ok 按鈕"));

         m_Tooltip.AddTool(GetDlgItem(IDCANCEL),_T("Cancel 按鈕"));

(5)       在ClassWizard中添加虛函數PreTranslateMessage並重載,加入處理tooltips的消息處理

BOOLCTooltipTestDlg::PreTranslateMessage(MSG* pMsg)

{

         switch(pMsg->message)

         {

         caseWM_KEYDOWN:

         caseWM_SYSKEYDOWN:

         caseWM_LBUTTONDOWN:

         caseWM_RBUTTONDOWN:

         caseWM_MBUTTONDOWN:

         caseWM_LBUTTONUP:

         caseWM_RBUTTONUP:

         case WM_MBUTTONUP:

         caseWM_MOUSEMOVE:

                   m_Tooltip.RelayEvent(pMsg);

                   break;

}

return CDialogEx::PreTranslateMessage(pMsg);

}

(6)       在應用函數類中加入窗體風格的處理,使得彈出的提示信息欄具有良好的風格

       CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS (CMFCVisualManagerOffice2007));

(7)       最終運行結果,當鼠標位於“確認”或者“取消”按鈕時,將彈出相應的提示信息

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章