我发布这个问题的原因是因为我无法通过谷歌找到任何答案。在研究它时,我最接近的是一些似乎不是真正解决方案的黑客。在翻遍了 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
确保文件底部有一个空行,否则资源编译器会报错。我不确定需要调整哪些设置才能让视觉设计器自动包含 afxribbon.rc,就像它在 NewControls 示例项目中所做的那样。但是将它添加到 .rc2 似乎可以解决问题。
更新
请记住,您可以使用 IDE 修改 RC 文件:
- 右键单击RC 文件并选择Resource Includes...: