2010-06-30 81 views
3

当试图将CMFCMenuButton添加到现有的MFC应用程序时遇到此问题。它工作正常,甚至调整了按钮以适应下拉箭头。但它并没有画出的下拉箭头,当我悬停在按钮时,我看到了下面的调试输出:为什么不是为CMFCMenuButton绘制的下拉箭头?

> Can't load bitmap: 42b8.GetLastError() = 716 
> CMenuImages. Can't load menu images 3f01 

它,即使与Visual Studio 2010 RTM,当你创建一个全新的MFC原来基于对话框的应用程序,CMFCMenuButton不绘制箭头并显示相同的错误。最初我假设我没有安装或注册正确的东西。但是,MFC Feature Pack的NewControls示例完美地显示了下拉箭头。

缺什么?

回答

4

我发布这个问题的原因是因为我找不到任何通过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 Feature Pack更新中控件所需的位图资源。现在,您不能只是简单地将缺少的代码添加到.rc文件的底部。如果这样做,每次使用可视化设计器编辑资源文件时,您添加的代码都将被删除。这个问题的解决办法是把它添加到YOUR_PROJECT_NAME.rc2文件的底部:

#ifndef _AFXDLL 
#include "afxribbon.rc"  // Ribbon and control bars 
#endif 

请确保您有在文件的底部,或资源编译器会抱怨一个空行。我不确定需要调整什么样的设置才能使视觉设计者自动将afxribbon.rc包含在NewControls示例项目中。但将其添加到.rc2似乎解决了这个问题。

+0

*“我不知道需要为了要调整的可视化设计器来设置什么自动将afxribbon.rc包含在NewControls示例项目中。“*我认为需要将'* .rc'包含('afxres.rc'和'afxribbon.rc')添加到'3 TEXTINCLUDE'部分。第三个“TEXTINCLUDE”部分是设计人员用来自动生成当直接调用资源编译器时包含的资源的部分。虽然这是一个非常有用的答案;我只是被这个问题困住了,而且记录极其糟糕。 – 2015-06-12 05:21:06

1

我解决这个问题,为自己在这样的方式:我补充一个条款,CMyApp :: InitInstance中:

BOOL CMyApp::InitInstance() 
{ 
    CWinAppEx::InitInstance(); 

    InitCommonControls(); 

    //This! 
    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 

    //... 
    return TRUE; 
}