为对话框设计美观的工具栏 (Add toolbar for CDialog)

本文详细介绍如何在CDialog中添加并优化工具栏功能,包括设置多行显示、添加提示信息及使用多彩色图标等。

本文介绍,在CDialog下工具栏的实现和优化

美化工具栏示例

1. 为CDialog添加工具栏

2. 使toolbar以多行显示

3. 为toolbar添加提示信息(TipText)

4. VC6下显示包含多彩色图片的工具栏

href="http://www.j2megame.org/wupei/plugins/plogeshi/styles/plogeshi.css" type="text/css" rel="stylesheet" />

 

一. 为CDialog添加工具栏

首先需要建立相应的TOOLBAR资源

将工具栏按钮摆放好,将相应的提示信息(TipText)写入,最好也将相应事件先生成好

在OnInitDialog()函数内添加代码:

 

  1. //工具条(其中CBRS_LEFT属性是为了工具栏多行显示而添加)
  2. m_ToolBar.CreateEx(this, TBSTYLE_FLAT,  
  3.         WS_CHILD|WS_VISIBLE|CBRS_SIZE_FIXED|CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY,
  4.         CRect(0,0,0,0));
  5. m_ToolBar.LoadToolBar(IDR_TOOLBAR);     //获取资源
  6. RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

 

ps: 如果不要多行显示需要,更改相应的属性

 

二. 使CDialog多行显示

注意如果要工具栏多行显示,需要加入CBRS_LEFT属性

实现代码:

 

  1. //其中TBBS_WRAPPED为换行属性
  2. m_ToolBar.SetButtonInfo(0,ID_BUTTON_1,TBBS_BUTTON,0);
  3. m_ToolBar.SetButtonInfo(1,ID_BUTTON_2,TBBS_BUTTON|TBBS_WRAPPED,1); //换行
  4.  
  5. m_ToolBar.SetButtonInfo(2,ID_BUTTON_3,TBBS_BUTTON,2);
  6. m_ToolBar.SetButtonInfo(3,ID_BUTTON_4,TBBS_BUTTON|TBBS_WRAPPED,3); //换行
  7.  
  8. m_ToolBar.SetButtonInfo(4,ID_BUTTON_5,TBBS_BUTTON,4);
  9. m_ToolBar.SetButtonInfo(5,ID_BUTTON_6,TBBS_BUTTON, 5);

 

 

三. 为toolbar添加提示信息(TipText)

添加事件声明和消息映射

 

  1. //添加事件声明(最好写在AFX_MSG宏外,否则可能出现编译错误)
  2. afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);
  3.  
  4. //添加消息映射(最好写在AFX_MSG_MAP宏外,否则可能出现编译错误)
  5. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,0xFFFF,OnToolTipText)
  6. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTipText)

 

添加事件实现

 

  1. BOOL CToolBarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.     ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
  4.  
  5.     // if there is a top level routing frame then let it handle the message
  6.     if (GetRoutingFrame() != NULL) return FALSE;
  7.  
  8.     // to be thorough we will need to handle UNICODE versions of the message also !!
  9.     TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
  10.     TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
  11.     TCHAR szFullText[512];
  12.     CString strTipText;
  13.     UINT nID = pNMHDR->idFrom;
  14.  
  15.     if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
  16.         pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
  17.     {
  18.         // idFrom is actually the HWND of the tool
  19.         nID = ::GetDlgCtrlID((HWND)nID);
  20.     }
  21.  
  22.     if (nID != 0) // will be zero on a separator
  23.     {
  24.         AfxLoadString(nID, szFullText);
  25.         strTipText=szFullText;
  26.  
  27. #ifndef _UNICODE
  28.         if (pNMHDR->code == TTN_NEEDTEXTA)
  29.         {
  30.             lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
  31.         }
  32.         else
  33.         {
  34.             _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
  35.         }
  36. #else
  37.         if (pNMHDR->code == TTN_NEEDTEXTA)
  38.         {
  39.             _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
  40.         }
  41.         else
  42.         {
  43.             lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
  44.         }
  45. #endif
  46.  
  47.         *pResult = 0;
  48.  
  49.         // bring the tooltip window above other popup windows
  50.         ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
  51.             SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
  52.        
  53.         return TRUE;
  54.     }
  55.  
  56.     return FALSE;
  57. }

 

 

四. VC6下显示包含多彩色图片的工具栏

VC6下只支持256色的工具栏图片,要想使用多彩色工具栏图片,如下所示

1. 先将相应的bmp图片导入VC6中,形成图片资源文件

2. 添加代码

 

  1. //相应成员变量
  2. CImageList m_ilToolBar;
  3. CBitmap bm;
  4. //IDB_BITMAP为图片资源ID
  5.  
  6. ///
  7. //实现代码
  8. HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  9.         MAKEINTRESOURCE(IDB_BITMAP),
  10.         IMAGE_BITMAP, //按位图格式
  11.         0,0, // cx,cy
  12.         LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
  13. bm.Attach(hbm);
  14. m_ilToolBar.Create(20,20,ILC_COLOR24, 4, 4);
  15. m_ilToolBar.Add(&bm,(CBitmap*)NULL);
  16.  
  17. //
  18. //将图片选入toolbar即可
  19. m_ToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

 

 

完成,这样就在对话框上不错的效果的工具栏了,试试吧

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值