【问题标题】:How do I get MessageBox icon using WinAPI如何使用 WinAPI 获取 MessageBox 图标
【发布时间】:2012-10-08 19:30:48
【问题描述】:

我有一个 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。 获取图标的正确方法是什么?

【问题讨论】:

  • MessageBox 图标是系统图标,您可以通过LoadImage(或LoadIcon)与IDI_INFORMATIONIDI_ERRORIDI_WARNINGIDI_QUESTION 一起加载。跨度>

标签: winapi visual-c++ messagebox


【解决方案1】:

消息框对话框上显示的图标是使用STATIC 控件和SS_ICON 样式实现的。您可以通过向该控件发送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; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 2019-07-27
    • 2012-05-15
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多