c++ - 如何读取 .rc 文件中 DLGINIT 结构中定义的字符串?

标签 c++ visual-studio-2010 visual-c++ mfc visual-c++-2010

简而言之,如何在运行时以编程方式访问已编译资源以从 DLGINIT 结构中提取字符串?

再详细一点...

在 MFC 应用程序中,组合框可以在 .rc 文件中定义为对话框描述中的一行,使用 COMBOBOX 并具有相应的 DLGINIT 结构,如下所示:

IDD_COMBOBOXTEST_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |     WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "ComboBoxTest"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,209,179,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14
    COMBOBOX        IDC_COMBO1,22,20,132,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    EDITTEXT        IDC_EDIT1,22,42,132,134,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "Load",IDC_BUTTON1,159,42,50,14
END

//...

IDD_COMBOBOXTEST_DIALOG DLGINIT
BEGIN
    IDC_COMBO1, 0x403, 4,  0    0x6e4f, 0x0065, 
    IDC_COMBO1, 0x403, 4,  0    0x7754, 0x006f, 
    0
END

我了解到 Visual C++ 资源文件使用资源文件顶部的给定代码页以单字节文本编码方式进行编码。我还了解到 DLGINIT 结构中的行分解如下:

<CONTROL ID>, 0x403, <STRING LENGTH>, 0    <STRING BYTES ENCODED FOR CODE PAGE>

我想做的是进入这个编译后的资源并拉出那个字符串。有一些使用 AfxFindResourceHandle 的 API,但我不确定这是我需要的方式。

最佳答案

据我所知,对话框在资源部分的布局方式与您使用 DLGTEMPLATE 在内存中手动创建对话框的方式相同。和 DLGITEMTEMPLATE .因此请查阅 MSDN 文档的那一部分来解析它们。到目前为止,我只做了相反的操作(即从头开始在内存中创建这样一个对话框模板)。

没有执行此操作的功能,您必须手动执行。

此外,据我所知,DLGINIT 甚至没有存储在 PE 文件中。我认为它只是用于资源编辑器本身,但我不是 100% 确定。

关于c++ - 如何读取 .rc 文件中 DLGINIT 结构中定义的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366175/

相关文章:

c++ - GetModuleHandle(NULL) 与 hInstance

c++ - movl多数据指令与汇编优化比较

C++多维数组多种数据类型

c++ - 如何通过引用 C++ 传递动态数组

c++ - 我可以在不传递指针数组的情况下启动协作内核吗?

visual-studio-2010 - AutoCad:复制对象时在后期绑定(bind)中获取 'Invalid object array exception'

c++ - 为什么这个自动矢量化器关心构造函数/析构函数?

c++ - 在 Windows 中更改原始波形数据的音高

visual-studio-2010 - 测试永远保持在 'pending' 状态

asp.net - MVC 转换项目,除非添加 'Global' 或删除 System...,否则完全限定的类不可用