尝试将CMFCMenuButton添加到现有MFC应用程序时遇到此问题。它工作正常,甚至调整按钮大小以适应下拉箭头。但它没有绘制下拉箭头,当我在按钮上方盘旋时,我看到了以下调试输出:
> Can't load bitmap: 42b8.GetLastError() = 716
> CMenuImages. Can't load menu images 3f01
事实证明,即使使用Visual Studio 2010 RTM,当您创建一个全新的基于MFC Dialog的应用程序时,CMFCMenuButton也不会绘制箭头并显示相同的错误。最初我假设我没有安装或正确注册的东西。但是,MFC Feature Pack中的NewControls示例完美地显示了下拉箭头。
缺少什么?
答案 0 :(得分:5)
我发布此问题的原因是因为我无法通过Google找到任何答案。我研究它时最接近的是一些看起来不是真正解决方案的黑客。在倾注了NewControls的例子之后,我终于找到了罪魁祸首。
在项目的默认.rc文件的底部,有以下代码:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "res\YOUR_PROJECT_NAME.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
NewControls示例的.rc文件如下所示:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "res\NewControls.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#ifndef _AFXDLL
#include "afxribbon.rc" // Ribbon and control bars
#endif
#endif
添加afxribbon.rc可启用MFC功能包更新中控件所需的位图资源。现在,您不能简单地将缺少的代码添加到.rc文件的底部。如果这样做,每次使用可视化设计器编辑资源文件时,都会删除添加的代码。该问题的解决方案是将其添加到YOUR_PROJECT_NAME.rc2文件的底部:
#ifndef _AFXDLL
#include "afxribbon.rc" // Ribbon and control bars
#endif
确保文件底部有一个空行,否则资源编译器会抱怨。我不确定需要调整什么设置才能让可视化设计器像NewControls示例项目中那样自动包含afxribbon.rc。但是将它添加到.rc2似乎解决了这个问题。
请记住,您可以使用IDE修改RC文件:
答案 1 :(得分:1)
我以这种方式为自己解决了这个问题:我在CMyApp::InitInstance
添加一个子句:
BOOL CMyApp::InitInstance()
{
CWinAppEx::InitInstance();
InitCommonControls();
//This!
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
//...
return TRUE;
}