2012-10-08 98 views
3

我有一個處理WM_INITDIALOG消息以獲取有關消息框信息的WH_CALLWNDPROC掛鉤代碼。我可以得到「消息」,「標題」,「按鈕」,但我無法獲得「圖標」信息。我試圖用一個函數象下面這樣:如何使用WinAPI獲取MessageBox圖標

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間諜++檢查,我看到圖標句柄是0 什麼是讓圖標正確的方法是什麼?

+2

的'MessageBox'圖標是系統圖標,你可以通過'LoadImage'(或'LoadIcon')加載使用'IDI_INFORMATION',' IDI_ERROR','IDI_WARNING'或'IDI_QUESTION'。 – jamesdlin

回答

2

使用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; 
} 
+0

@Sercan你很受歡迎 –