在MFC中,给各个控件显示变化的提示信息

来源:互联网 发布:学程序员 编辑:程序博客网 时间:2024/06/06 09:24

第一步:在头文件里添加一个CToolTipCtrl类型的变量m_tooltip,并在构造函数里初始化

 m_tooltip.Create(this,TTS_ALWAYSTIP | TTS_NOPREFIX);
 m_tooltip.Activate(TRUE);
 CWnd* pw = GetDlgItem(IDC_OBJECTAUTHORISE); //要显示提示信息的控件id
 m_tooltip.AddTool(pw, LPSTR_TEXTCALLBACK);  //设置回调标志,当你需要随时间变化时显示不同信息,鼠标移到控件上就会产生NOTIFY消息,然后就可以设置你想要显示的信息

第二步: 进行消息映射。在构造函数里声明消息映射函数

afx_msg BOOL  OnTipText(UINT id, NMHDR* pNMHDR, LRESULT *pResult);   //函数名可以自己定

然后在BEGIN_MASAGE_MAP 中进行消息映射

ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CFile_Authorise_Change::OnTipText)

最后定义消息处理函数ontiptext (当鼠标移到控件时调用此函数)

BOOL 类名::OnTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(id);

   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
   UINT_PTR nID = pNMHDR->idFrom;
   BOOL bRet = FALSE;

   if (pTTT->uFlags & TTF_IDISHWND)
   {
      // idFrom is actually the HWND of the tool
      nID = ::GetDlgCtrlID((HWND)nID);
   if(nID==NULL)
    return FALSE;
   switch(nID)
   {
   case IDC_OBJECTAUTHORISE:
   // CString tmp;
   // tmp.Format(_T("%s的权限"), g_objectname);
    pTTT->lpszText = (LPSTR)((LPCTSTR)g_objectname);  //这里可以设置你要显示的提示信息
    break;
   }
   return TRUE;
   }

   *pResult = 0;

   return bRet;

}

第三步:重写虚函数PreTranslateMessage

BOOL CFile_Authorise_Change::PreTranslateMessage(MSG* pMsg)
{
 // TODO: 在此添加专用代码和/或调用基类
 if(pMsg->message == WM_MOUSEMOVE)
  m_tooltip.RelayEvent(pMsg);
 return CDialogEx::PreTranslateMessage(pMsg);
}

第四步:把控件的属性一定要设置为Notify,不然鼠标移到控件上接收不到消息。

原创粉丝点击