MFC——对话框程序添加工具栏按钮图标及其按钮tooltip

在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,很多资源都需要自己手动添加。最近在开发一个程序时,想尝试在对话框程序里面添加 工具栏 及其按钮tooltip,于是便有了这篇文章,希望把经验总结下来以方便自己以后查询以及各位同仁查询!


一、首先建立一个对话框程序

      1、添加工具栏资源,并在工具栏资源里添加几个按钮,并将按钮的width 和 height 改为24,也可以根据自己的需要更改尺寸,同时,还要为相应的按钮设置一个ID。具体操作如图:


二、创建工具栏

      1、在***Dlg.h添加工具栏对象, 以及位图资源

[cpp]  view plain  copy
  1. private:  
  2.     CToolBar m_ToolBar;  
  3. // 位图资源  
  4.     CBitmap m_bitmap1;  
  5.     CBitmap m_bitmap2;  
  6.     CBitmap m_bitmap3;  
  7.     CImageList m_ImageList;  
      

        2、在OnInitDialog()函数里面添加以下代码,创建工具栏

[cpp]  view plain  copy
  1. if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) ||  
  2.         !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))  
  3.     {  
  4.         TRACE0("未能创建工具栏\n");  
  5.         AfxMessageBox(_T("未能创建工具栏\n"));  
  6.         return FALSE;      // 未能创建  
  7.     }  
  8.     m_ToolBar.ShowWindow(SW_SHOW);  
  9.     //控件条定位  
  10.     RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  

         3、载入几个24*24尺寸的位图,注意,该尺寸是根据上面按钮的尺寸而设定的。


          4、在以上 第2   步后面的代码添加载入位图的代码,最终如图

[cpp]  view plain  copy
  1. if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) ||  
  2.     !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))  
  3. {  
  4.     TRACE0("未能创建工具栏\n");  
  5.     AfxMessageBox(_T("未能创建工具栏\n"));  
  6.     return FALSE;      // 未能创建  
  7. }  
  8. m_ToolBar.ShowWindow(SW_SHOW);  
  9. //控件条定位  
  10. RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  
  11.       
  12. m_bitmap1.LoadBitmapW(IDB_BITMAP_MULTIMETER);  
  13. m_bitmap2.LoadBitmapW(IDB_BITMAP_PHONE);  
  14. m_bitmap3.LoadBitmapW(IDB_BITMAP_SPEAKER);  
  15. m_ImageList.Create(24,24, ILC_COLOR32 | ILC_MASK,0,0);  
  16. m_ImageList.Add(&m_bitmap1, RGB(0, 0, 0));  
  17. m_ImageList.Add(&m_bitmap2,RGB(0, 0, 0));  
  18. m_ImageList.Add(&m_bitmap3,RGB(255, 255, 255));  
  19. m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);  

至此,便已并运行程序,可以看到程序界面就有我们添加上句的工具栏按钮图标,如图:


以上已经实现了为工具栏按钮添加图标的功能,那如何为工具栏按钮添加tooltip功能能,如下图的效果:

接着就由本人继续介绍操作步骤:


      1、在***Dlg.h 头文件添加 消息处理函数声明:

[cpp]  view plain  copy
  1. afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);  // 工具条提示  

       2、在***Dlg.cpp添加消息映射

[cpp]  view plain  copy
  1. BEGIN_MESSAGE_MAP(CSageRemoteKeyTestDlg, CDialogEx)  
  2.         ......  
  3.     ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText)  
  4. END_MESSAGE_MAP()  

       3、添加函数定义

[cpp]  view plain  copy
  1. BOOL ***Dlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)  
  2. {  
  3.        
  4.     TOOLTIPTEXT   *pTTT=(TOOLTIPTEXT*)pNMHDR;    
  5.     UINT  uID=pNMHDR->idFrom;     // 相当于原WM_COMMAND传递方式的wParam(low-order), 在wParam中放的则是控件的ID。  
  6.   
  7.     if(pTTT->uFlags  &  TTF_IDISHWND)    
  8.         uID=::GetDlgCtrlID((HWND)uID);     
  9.     if(uID==NULL)     
  10.         return   FALSE;    
  11.     switch(uID)  
  12.     {    
  13.         case IDOK:  
  14.             pTTT->lpszText= _T("按下此键开始测试");    
  15.             break;  
  16.   
  17.         case IDM_POWER_MULTIMETER:  
  18.             pTTT->lpszText= _T("电表配置");    
  19.             break;  
  20.               
  21.         case IDM_SHIELDINGBOX_COM:  
  22.             pTTT->lpszText= _T("串口配置");    
  23.             break;  
  24.   
  25.         case IDM_BEEP:  
  26.             pTTT->lpszText= _T("蜂鸣器配置");    
  27.             break;  
  28.     }  
  29.    
  30.     return TRUE;  
  31. }  

至此,编译运行程序就能实现上图的tooltip功能了!

猜你喜欢

转载自blog.csdn.net/perfectguyipeng/article/details/79546791
今日推荐