如何使用WinAPI获取消息框图标



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

消息

框对话框上显示的图标是使用具有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; 
}

最新更新