MFC 给自定义工具栏添加提示信息

 
MFC 给自定义工具栏添加提示信息
2010-01-30 11:09

摘抄自宁静的乡村:http://hi.baidu.com/gxichun/blog/item/a391432330c615599822ed16.html

一款软件要达到更加完美,友好的界面是必不可少的,用户使用起来容易上手,不需要太多的培训。除了设计合理的操作外,还应给客户明了的帮助提示,下面我们就谈谈如何在MFC应用程序中实现当鼠标悬停到自定义工具栏的某个按钮上方时便显示相应的文本提示标签这一功。

为了便于说明,我提前创建了一个MFC的SDI应用程序。

1、在mainFram.h中添加窗口处理过程函数声明:

// 生成的消息映射函数
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnButtonLarge();
afx_msg void OnButtonSmall();
afx_msg void OnButtonRect();
afx_msg void OnButtonCircle();
afx_msg void OnButtonLine();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnProgress(WPARAM wParam, LPARAM lParam);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnShowProgressBar();
afx_msg BOOL   OnToolTipText(UINT,   NMHDR*   pNMHDR,   LRESULT*   pResult) ;

DECLARE_MESSAGE_MAP()

2、在mainFrame.cpp中添加消息映射和处理过程函数的实现:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_BUTTON32771, OnButtonLarge)
ON_COMMAND(ID_BUTTON32773, OnButtonSmall)
ON_COMMAND(ID_BTN_RECT, OnButtonRect)
ON_COMMAND(ID_BTN_CIRCLE, OnButtonCircle)
ON_COMMAND(ID_BTN_LINE, OnButtonLine)
ON_WM_TIMER()
ON_MESSAGE(UM_PROGRESS, OnProgress)
ON_COMMAND(ID_BTN_PROCESS,OnShowProgressBar)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)  
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)

END_MESSAGE_MAP()

//函数实现部分

BOOL   CMainFrame::OnToolTipText(UINT,   NMHDR*   pNMHDR,   LRESULT*   pResult)  
{  
ASSERT(pNMHDR->code   ==   TTN_NEEDTEXTA   ||   pNMHDR->code   ==   TTN_NEEDTEXTW);  

//   if   (GetRoutingFrame()   !=   NULL)   return   FALSE;  

//   UNICODE消息  
TOOLTIPTEXTA*   pTTTA   =   (TOOLTIPTEXTA*)pNMHDR;  
TOOLTIPTEXTW*   pTTTW   =   (TOOLTIPTEXTW*)pNMHDR;  
//TCHAR   szFullText[512];  
CString   strTipText;  
UINT   nID   =   pNMHDR->idFrom;  

if   (pNMHDR->code   ==   TTN_NEEDTEXTA   &&   (pTTTA->uFlags   &   TTF_IDISHWND)   ||  
   pNMHDR->code   ==   TTN_NEEDTEXTW   &&   (pTTTW->uFlags   &   TTF_IDISHWND))  
{  
   //   idFrom为工具条的HWND    
   nID   =   ::GetDlgCtrlID((HWND)nID);  
}  

if   (nID   !=   0)   //不为分隔符  
{  
   //AfxLoadString(nID,   szFullText);  
   //strTipText=szFullText;   
//添加自己想要的提示语
   strTipText.LoadString(nID);  
   strTipText   =   strTipText.Mid(strTipText.Find('\n',0)+1);  

#ifndef   _UNICODE  
   if   (pNMHDR->code   ==   TTN_NEEDTEXTA)  
   {  
    lstrcpyn(pTTTA->szText,   strTipText,   sizeof(pTTTA->szText));  
   }  
   else  
   {  
    _mbstowcsz(pTTTW->szText,   strTipText,   sizeof(pTTTW->szText));  
   }  
#else  
   if   (pNMHDR->code   ==   TTN_NEEDTEXTA)  
   {  
    _wcstombsz(pTTTA->szText,   strTipText,sizeof(pTTTA->szText));  
   }  
   else  
   {  
    lstrcpyn(pTTTW->szText,   strTipText,   sizeof(pTTTW->szText));  
   }  
#endif  

   *pResult   =   0;  

   //   使工具条提示窗口在最上面  
   ::SetWindowPos(pNMHDR->hwndFrom,   HWND_TOP,   0,   0,   0,   0,SWP_NOACTIVATE|  
    SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);    
   return   TRUE;  
}  
//return   TRUE;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值