Windows:对话框不显示RC文件给出的图标

时间:2016-01-26 22:40:20

标签: windows winapi dialog icons

我在Windows下的对话框中出现了一个奇怪的问题。

我在RC-file中定义了一个对话框和图标。以下是相关部分:

define IDI_LOGO 102
ICON IDI_LOGO, IDC_ICON_LOGO, 440, 322, 21, 20
IDI_LOGO ICON "icon.ico"

稍后我显示对话框并在对话框中显示系统图标而不是我自己的图标。但是,如果我运行以下代码,我会在对话框中显示我的图标:

HMODULE module = GetModuleHandle(NULL);
HICON icon = LoadIcon(module, MAKEINTRESOURCE(IDI_LOGO));
SendMessage(GetDlgItem(dlg, IDC_ICON_LOGO), STM_SETIMAGE, IMAGE_ICON, (LPARAM)icon);

我使用MSVC2010 Express(请不要问为什么)。

出了什么问题?为什么图标没有按预期显示?请指教。谢谢!

1 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。问题是我在显示对话框本身时没有提供模块句柄。当我按照以下步骤操作时,我可以正确显示图标和位图,而无需在运行时执行任何操作。

INT_PTR displayMainDialog() {
    HMODULE module = GetModuleHandle(NULL);
    return DialogBox(module, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)dlgProc);
}

DialogBox的第一个参数是NULL,但它必须是模块的句柄。我想这就是Windows知道从哪里获取静态控件的图标和位图的位置。

无论如何,非常感谢所有回复!