我在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
(请不要问为什么)。
出了什么问题?为什么图标没有按预期显示?请指教。谢谢!
答案 0 :(得分:2)
我已经解决了这个问题。问题是我在显示对话框本身时没有提供模块句柄。当我按照以下步骤操作时,我可以正确显示图标和位图,而无需在运行时执行任何操作。
INT_PTR displayMainDialog() {
HMODULE module = GetModuleHandle(NULL);
return DialogBox(module, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)dlgProc);
}
DialogBox的第一个参数是NULL,但它必须是模块的句柄。我想这就是Windows知道从哪里获取静态控件的图标和位图的位置。
无论如何,非常感谢所有回复!