对话框的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) 最终运行结果,当鼠标位于“确认”或者“取消”按钮时,将弹出相应的提示信息