MFC Toolbar图标尺寸调整出错解决方法

解决方法转自

https://social.msdn.microsoft.com/Forums/vstudio/en-US/8e8b8995-706f-43cc-9463-700d9fa6a010/how-can-i-adjust-icon-size-of-toolbar?forum=vcgeneral

当调整Toolbar中的图标大小的时候,会导致MFC打开后afxToolbar类型的名称的cpp出错。

原因是,默认在程序目录中有一个UserImages.bmp文件,其中的图标尺寸是16*15。

默认的MFC程序会自动加载这个图片,导致程序出错。解决方法如下:


problem solved.

reason is the CMainFrame.cpp  OnCreate event,

the following code cause problem, quote them , problem solved.

/*

if (CMFCToolBar::GetUserImages() == NULL)
 {
  // 加载用户定义的工具栏图像
  if (m_UserImages.Load(_T(".\\UserImages.bmp")))
  {
   CMFCToolBar::SetUserImages(&m_UserImages);
  }
 }*/

there is a UserImages.bmp in project folder, size 15*16,  and we change size, so the two size different, so cause this.

exactly assertion error is from here , the bold  italic underline words.

BOOL __stdcall CMFCToolBar::SetUserImages(CMFCToolBarImages* pUserImages)
{
 ENSURE(pUserImages != NULL);
 if (!pUserImages->IsValid())
 {
  ASSERT(FALSE);
  return FALSE;
 }

 if (m_sizeImage != pUserImages->GetImageSize())
 {
  ASSERT(FALSE);
  return FALSE;
 }

 m_pUserImages = pUserImages;
 return TRUE;
}

另外,添加或减少Toolbar中的图标后,用编辑器打开XXX.rc文件,检查TOOLBAR下面的BUTTON项中是否也更新,

如果没有更新,自行手动处理,添加或删除图标使之和Toolbar图片的上的保持一致。


IDR_MAINFRAME TOOLBAR 17, 15
BEGIN
    BUTTON      ID_FILE_NEW
    BUTTON      ID_FILE_OPEN
    BUTTON      ID_FILE_SAVE
    BUTTON      ID_FILE_PRINT
    BUTTON      ID_BUTTON_RESET_VIEW
    BUTTON      ID_BUTTON_ZOOM_ALL
    BUTTON      ID_APP_ABOUT
END


MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows应用程序的C++类库。MFC中提供了许多控件,其中包括Toolbar控件。下面是关于MFC Toolbar的介绍和演示: 1. 创建Toolbar控件: 在资源视图中,右键点击项目资源,选择“添加资源”,然后选择资源类型为“Toolbar”,点击“新建”。在资源视图中可以找到新建的Toolbar控件。 2. 在Toolbar中新建工具栏中的按钮: 首先,在Toolbar控件中右键点击第一个按钮,查看属性。在属性中设置ID后,Toolbar会自动新建一个按钮。依次给新建的按钮命名就会创建多个按钮。 下面是一个示例代码,演示了如何在MFC中创建Toolbar控件和添加按钮: ```cpp // 在头文件中定义Toolbar控件的成员变量 CToolBar m_ToolBar; // 在OnInitDialog()函数中创建Toolbar控件 m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_ToolBar.LoadToolBar(IDR_MAINFRAME); // 加载Toolbar资源 // 将Toolbar控件添加到工具栏区域 RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); // 在Toolbar中添加按钮 m_ToolBar.SetButtons(NULL, 4); // 设置按钮数量 m_ToolBar.SetButtonInfo(0, ID_BUTTON1, TBBS_BUTTON, 0); // 设置按钮信息 m_ToolBar.SetButtonInfo(1, ID_BUTTON2, TBBS_BUTTON, 1); m_ToolBar.SetButtonInfo(2, ID_BUTTON3, TBBS_BUTTON, 2); m_ToolBar.SetButtonInfo(3, ID_BUTTON4, TBBS_BUTTON, 3); // 更新工具栏 m_ToolBar.Invalidate(); m_ToolBar.UpdateWindow(); ``` 请注意,上述代码中的ID_BUTTON1、ID_BUTTON2等是自定义的按钮ID,需要在资源文件中定义对应的按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值