自绘工具条

  
自绘工具条
      
      
     
       工具条总是界面设计中首先考虑的对象。它可以完成菜单的功能,并以绚丽的图标装饰,同时能够停靠和浮动。 MFC 实现了多种工具条封装类,如 CToolBar CReBar CDialogBar CToolBarCtrl 等,它们可以实现不同特性的工具栏。如 CToolBar 可以停靠浮动, CReBar 可以伸缩, CDialogBar 可以包含子控件等。前三者都派生于 CControlBar CToolBarCtrl 派生于 CWnd 类。
 
制作自绘的工具条,我这里用的是 CToolBar 类。
1. 首先从 CToolBar 类派生一个类 DToolBar 。把 CMainFrame 中的“ CToolBar    m_wndToolBar; ”注释掉,添加 DToolBar m_wndToolBar; 并把 CMainFrame::OnCreate() 函数中的
//     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
//            | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) /*||
//            !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)*/)
//     {
//            TRACE0("Failed to create toolbar/n");
//            return -1;      // fail to create
//     }
注释掉。
2. CMainFrame 中建立函数    BOOL CreateExToolBar();
BOOL CMainFrame::CreateExToolBar()
{
       CImageList img;
       CString str;
      
       if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
       {
              return -1;     
       }
      
       // 下面的代码是设置按钮的最大和最小宽度
       m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50,90);
       // 下面的代码是设置 " " 的位图
       img.Create(25, 25, ILC_COLOR16|ILC_MASK,2,2);
       img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
       img.Add(AfxGetApp()->LoadIcon(IDI_NEW));
    img.Add(AfxGetApp()->LoadIcon(IDI_OPEN));
       img.Add(AfxGetApp()->LoadIcon(IDI_SAVE));
       img.Add(AfxGetApp()->LoadIcon(IDI_HOME));
    img.Add(AfxGetApp()->LoadIcon(IDI_MAIL));
       img.Add(AfxGetApp()->LoadIcon(IDI_FAVORITE));
   
       m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
       img.Detach();    
      
       // 下面的代码是设置 " " 的位图
       img.Create(23, 23, ILC_COLOR16|ILC_MASK, 2,2);
       img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
       img.Add(AfxGetApp()->LoadIcon(IDI_NEW));
    img.Add(AfxGetApp()->LoadIcon(IDI_OPEN));
       img.Add(AfxGetApp()->LoadIcon(IDI_SAVE));
       img.Add(AfxGetApp()->LoadIcon(IDI_HOME));
    img.Add(AfxGetApp()->LoadIcon(IDI_MAIL));
       img.Add(AfxGetApp()->LoadIcon(IDI_FAVORITE));
   
       m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
       img.Detach();
      
       // 改变属性
   m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT|TBSTYLE_TRANSPARENT);
// 去掉 CBRS_CHECK, 并在 DToolBar 中重载 OnUpdateCmdUI, 就可以使没有消息映射的按钮正常显示
       m_wndToolBar.SetButtons(NULL,6); // 为按钮分配空间     
       // set up each toolbar button 设置文字  
       m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0);
       m_wndToolBar.SetButtonText(0, " 新建 ");
   
       m_wndToolBar.SetButtonInfo(1, ID_FILE_OPEN, TBSTYLE_BUTTON, 1);
       m_wndToolBar.SetButtonText(1, " 打开 ");
 
       m_wndToolBar.SetButtonInfo(2, ID_FILE_SAVE, TBSTYLE_BUTTON, 2);
       m_wndToolBar.SetButtonText(2, " 保存 ");
 
       m_wndToolBar.SetButtonInfo(3, IDC_HOME, TBSTYLE_BUTTON, 3);
       m_wndToolBar.SetButtonText(3, " 主页 ");     
      
       m_wndToolBar.SetButtonInfo(4, IDC_MAIL, TBSTYLE_BUTTON, 4);
       m_wndToolBar.SetButtonText(4, " 邮件 ");
      
       m_wndToolBar.SetButtonInfo(5,IDC_FAVORITE, TBSTYLE_BUTTON, 5);
       m_wndToolBar.SetButtonText(5," 收藏 ");
      
    CRect rectToolBar;
       // 得到按钮的大小
       m_wndToolBar.GetItemRect(0, &rectToolBar);
       // 设置按钮的大小和位图大小
       m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(23,23));
       return TRUE;
}
3. 如果你的按钮没有添加消息相应函数,但是你仍然希望 DToolBar 中的按钮能够正常显示出图片的话,不要忘了在 DtoolBar 中添加一个虚函数     virtual void OnUpdateCmdUI(CFrameWnd* pTarget,BOOL bDisableIfNoHndler); 就可以了。
4. CmainFrame::OnCreate() 函数中添加一下代码,实现 DtoolBar 的创建。
if (!this->CreateExToolBar())
              return -1;
这样一个可以根据你自己的需要添加不同的图标,可以浮动停靠的工具栏就做好了。很简单。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值