對話框的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(¶m);
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) 最終運行結果,當鼠標位於“確認”或者“取消”按鈕時,將彈出相應的提示信息