我有一个WH_CALLWNDPROC钩子代码,它处理WM_INITDIALOG消息以获取有关消息框的信息。我可以得到“消息”,“标题”,“按钮”,但我无法得到“图标”信息。我正在尝试使用如下函数:
long getIcon(HWND hwnd) { // handle of messagebox dialog
HWND hlbl = GetDlgItem(hwnd,20);
wcout << "LABEL HWND: " << hlbl << endl;
if (hlbl != NULL) {
LRESULT r = SendMessage(hlbl,WM_GETICON,0,0);
return (long)r;
}
return 0;
}
函数总是返回0.我已经通过MS Spy ++检查了,我看到图标句柄为0。 获取图标的正确方法是什么?
答案 0 :(得分:2)
消息框对话框中显示的图标是使用SS_ICON
样式的STATIC
控件实现的。您可以通过向该控件发送STM_GETICON
消息来获取图标句柄。
在您的问题的代码中,名为hlbl
的变量实际上是包含图标的STATIC
控件的窗口句柄。我把它命名为hIconWnd
。通过更改名称,获取图标的代码如下所示:
HICON getIcon(HWND hwnd) { // handle of messagebox dialog
HWND hIconWnd = GetDlgItem(hwnd, 20);
if (hIconWnd != NULL) {
return (HICON)SendMessage(hIconWnd, STM_GETICON, 0, 0);
}
return NULL;
}