为CToolBar工具栏窗口按钮添加ICON图标需要注意的一点

您所在的位置:网站首页 mfc工具栏添加图标 为CToolBar工具栏窗口按钮添加ICON图标需要注意的一点

为CToolBar工具栏窗口按钮添加ICON图标需要注意的一点

2024-07-11 08:45| 来源: 网络整理| 查看: 265

VC使用CToolBar类创建工具栏,例如一个SDI应用程序,在MFC应用程序框架自动生成的工具栏IDR_MAINFRAME基础上,可使用资源编辑器创建工具栏资源,步骤如下:

(1) 使用资源编辑器编辑工具栏IDR_MAINFRAME,删除所有自动生成的工具栏按钮,如新建、打开等

(2) 添加ID为ID_EXIT_BAR图标。

(3) 资源视图选中工程,右键【添加】->【添加资源】->【ICON】-> 【导入】,选择退出按钮图标exit.ico,其中exit.ico的大小为24X24,添加ICO资源,将ID改为IDI_EXIT。

(4) 为CMainFrame类添加成员变量CImageList m_ImageList;

(5) 修改CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数,添加如下代码:

       m_ImageList.Create(24,24,ILC_COLOR32|ILC_MASK,1,1); m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_EXIT)); m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ImageList); m_wndToolBar.SetSizes(CSize(31,31),CSize(24,24));

CRect temp; m_wndToolBar.GetItemRect(0,&temp); m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(temp.Width(),temp.Height()));

这样就为CToolBar工具栏的ID_EXIT_BAR按钮添加了一个大小为24X24的图标。方法不复杂,但需要注意的是设置工具按钮大小的函数SetSizes(),第一个参数CSize(31,31)设置的矩形只要需比第二个参数CSize(24,24)的x都至少要大7,y都至少要大6,否则会运行时会出现异常,原因是CToolBar::SetSizes()的原型如下:

        // CToolBar

       void CToolBar::SetSizes(SIZE sizeButton, SIZE sizeImage)        {   ASSERT_VALID(this);   // sizes must be non-zero and positive   ASSERT(sizeButton.cx > 0 && sizeButton.cy > 0);   ASSERT(sizeImage.cx > 0 && sizeImage.cy > 0);    // button must be big enough to hold image   //   + 7 pixels on x  //   + 6 pixels on y   ASSERT(sizeButton.cx >= sizeImage.cx + 7);   ASSERT(sizeButton.cy >= sizeImage.cy + 6);  if (::IsWindow(m_hWnd))  { // set the sizes via TB_SETBITMAPSIZE and TB_SETBUTTONSIZE VERIFY(SendMessage(TB_SETBITMAPSIZE, 0, MAKELONG(sizeImage.cx, sizeImage.cy))); VERIFY(SendMessage(TB_SETBUTTONSIZE, 0, MAKELONG(sizeButton.cx, sizeButton.cy))); Invalidate();   // just to be nice if called when toolbar is visible  }  else  { // just set our internal values for later m_sizeButton = sizeButton; m_sizeImage = sizeImage; }     }

(6) 为ID_EXIT_BAR添加消息相应函数,进行相关处理,这样就完成了工具栏按钮呢图标及其消息响应函数的添加。

         ON_COMMAND(ID_EXIT_BAR, &CMainFrame::OnExitProgramme)//退出程序

     



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3