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

时间:2012-07-06 16:29:47

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

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

更详细......

在MFC应用程序中,可以使用COMBOBOX将.bo文件中的组合框定义为对话框描述中的一行,并具有相应的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,但我不确定这是我需要的方式。

1 个答案:

答案 0 :(得分:1)

据我所知,资源部分中对话框的布局方式是使用DLGTEMPLATEDLGITEMTEMPLATE在内存中手动创建对话框的方式。因此,请参阅MSDN文档的那部分来解析它们。到目前为止,我只做了反向(即从头开始在内存中创建了这样的对话框模板)。

无法执行此操作,您必须手动执行此操作。

另外,据我所知,DLGINIT甚至没有存储在PE文件中。我认为仅仅是资源编辑本身,但我并不是百分之百确定。