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

来源:互联网 发布:jdk1.8源码下载官网 编辑:程序博客网 时间:2024/06/07 03:04

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)//退出程序

     

0 0
原创粉丝点击