关于视觉 c:如何使用 WinAPI 获取 MessageBox 图标

How do I get MessageBox icon using WinAPI

我有一个 WH_CALLWNDPROC 挂钩代码,它处理 WM_INITDIALOG 消息以获取有关消息框的信息。我可以获得"消息"、"标题"、"按钮",但无法获得"图标"信息。我正在尝试使用如下函数:

1
2
3
4
5
6
7
8
9
10
11
12
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。
获取图标的正确方法是什么?


消息框对话框上显示的图标是使用具有 SS_ICON 样式的 STATIC 控件实现的。您可以通过发送该控件的 STM_GETICON 消息来获取图标句柄。

在您问题的代码中,名为 hlbl 的变量实际上是包含图标的 STATIC 控件的窗口句柄。我将其命名为 hIconWnd。更改名称后,获取图标的代码将如下所示:

1
2
3
4
5
6
7
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;
}