3

メッセージボックスに関する情報を取得するためにWM_INITDIALOGメッセージを処理するWH_CALLWNDPROCフックコードがあります。「メッセージ」、「タイトル」、「ボタン」は取得できましたが、「アイコン」情報は取得できませんでした。私は以下のような関数を使おうとしています:

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を返します。MSSpy++で確認したところ、アイコンハンドルが0であることがわかりました。アイコンを取得する正しい方法は何ですか。

4

1 に答える 1

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; 
}
于 2012-10-08T11:24:40.950 に答える