MFC中通用资源的整合与使用一些常用的功能如:文件下载、邮件发送等通常是包含对话框、图片等资源的,但是又不愿配置到资源dll中使用,制作静态lib在运行时会找不到资源。可以考虑以下方法整合: 1.通用资源包的整理与测试 新建一个空的项目,把你所有的资源添加进去,例如都在commonres目录下,新建一个main.cpp作为测试入口:
int _tmain(int argc, _TCHAR* argv[]) {
int nRetCode = 0;
if (AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0) == FALSE) {
nRetCode = 1;
} else {
CHelloDlg dlg;
dlg.DoModal();
}
return nRetCode;
}
这样可以方便测试通用资源中的功能是否有效。
2.在你需要通用资源的应用程序项目中,添加一个名称为commonres的刷选器, 并把上述资源中的文件通过添加现有文件的方式添加进来。 这些文件应包括.rc、resource.h、窗口类、自定义C++类等头文件和实现文件, 总之把需要的都添加进来,不需要的可以不添加,以免增加程序体积。
3.在主程序中可以通过添加头文件便可以使用通用资源中的功能了。 好处是分类清楚,功能较独立,方便管理,直接集成到应用程序本身中。
4.因为通用资源是要集成到主程序中的,因此需要注意的是通用资源中的资源ID不能和主程序的资源ID有重复的。 可以将通用资源的resource.h文件中几个值取高端的范围值,它们是_APS_NEXT_RESOURCE_VALUE(对话框、菜单、图片、图标等), _APS_NEXT_COMMAND_VALUE(主菜单项、弹出菜单项等), _APS_NEXT_CONTROL_VALUE(各种控件ID),_APS_NEXT_SYMED_VALUE(状态栏、工具栏上所用控件与标签)。
参见:http://msdn.microsoft.com/en-us/library/6t3612sk%28VS.80%29.aspx
Here is what the APS_NEXT values are for an empty (new) .RC file: Copy
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
_APS_NEXT_RESOURCE_VALUE is the next symbol value that will be used for a dialog resource, menu resource, and so on. The valid range for resource symbol values is 1 to 0x6FFF.
_APS_NEXT_COMMAND_VALUE is the next symbol value that will be used for a command identification. The valid range for command symbol values is 0x8000 to 0xDFFF.
_APS_NEXT_CONTROL_VALUE is the next symbol value that will be used for a dialog control. The valid range for dialog control symbol values is 8 to 0xDFFF.
_APS_NEXT_SYMED_VALUE is the next symbol value that will be issued when you manually assign a symbol value using the New command in the Symbol Browser.
24611935 42952149