vs2008 对话框上的工具栏添加提示信息

对话框上的工具条上的提示信息不能采用mfc应用程序直接在资源中添加的方式添加,因为对话框不由CFrameWnd管理。

1. 在对话框类头文件.h中添加

BOOL OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult);

2. 在对话框.cpp文件中添加

(1)消息映射中添加:

BEGIN_MESSAGE_MAP(CAssessMainDialog, CBCGPDialog)

//控件响应,范围为0到无穷大

ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipNotify)

//控件响应,范围为0到OxFFFF
 //ON_NOTIFY_EX_RANGE( TIN_NEEDTEXT,0,OxFFFF,OnToolTipNotify)
END_MESSAGE_MAP()

(2)添加响应函数:

BOOL CAssessMainDialog::OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult )

 BOOL bResult = TRUE;
 TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*)pNMHDR;
 UINT_PTR uID = pNMHDR->idFrom;
 if ( pTTT->uFlags && TTF_IDISHWND)
 {  

  //int nID = ::GetDlgCtrlID(HWND(uID);)网上例子说uID为控件在窗口中的句柄,测试结果其实就是控件的ID,因此这句不需要,

 //也可能是编译器的原因。。。。。。
  CString strToolTips(_TEXT(""));
  switch ( uID )
  {
  case ID_EXECUTE:
   strToolTips.Format(_TEXT("%s"),_TEXT("执行评估流程"));
   break;
  case ID_SAVEFILE:
   strToolTips.Format(_TEXT("%s"),_TEXT("保存评估流程"));
   break;
  case ID_OPENFILE:
   strToolTips.Format(_TEXT("%s"),_TEXT("打开评估流程"));
   break;
  default:
   bResult = FALSE;
  }
  if ( TRUE == bResult)
  {
   *pResult = 0;
   _tcscpy( pTTT->lpszText,strToolTips);
   pTTT->hinst = NULL;

  }
  return bResult;
 }

}

(3)启用工具提示

在初始化函数中添加,不一定在OnInitDialog函数中。

BOOL CAssessMainDialog::OnInitDialog()
{
 CBCGPDialog::OnInitDialog();
 CBCGPDialog::EnableVisualManagerStyle();
 m_ToolBar->EnableToolTips(TRUE);

//网上的例子是直接启用对话框工具提示,测试结果只能对整个工具栏显示提示信息,改为启用工具栏提示信息,ok了

//EnableToolTips(TRUE); 

return TRUE; 
}

参见“百度文库”http://wenku.baidu.com/view/bf6a9105cc17552707220890.html

原文地址:https://www.cnblogs.com/huipengkankan/p/2176020.html