ALT+Tabチックなプログラムを書く…アイコン取得編

『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』の一応続編です。

まぁ、別にアイコンが表示されてなくても良かったんですが…ALT+Tabでも表示されてるし、表示してみるかと ;)

ウィンドウハンドルは前のエントリで取得できてるので、それから取得できるはず。で、調べてみるとSendMessageかGetClassLong辺りで取得できるっぽい。何で2種類あるんでしょうね :arrow:

とりあえず、SendMessageでアイコンを取得してみました。ありゃ、取れるアプリケーションと取れないアプリケーションがあるよ :shock:

仕方ないので、GetClassLongに変えてみました。う~ん、SendMessageより良い感じ。でも、やっぱり取得できないアプリケーションがある…結局よくわからないので両方の併せ技で取得するようにしましたとさ。

HICON hicon = HICON(::GetClassLong(hwnd, GCL_HICONSM));
if (hicon == NULL) {
    hicon = HICON(::SendMessage(hwnd, WM_GETICON, TRUE, NULL));
    if (hicon == NULL) {
        hicon = ::AfxGetApp()->LoadIcon(IDR_DEFAULTICON);
    }
}
    // ここで、hiconにアイコンが取得できてる

IDR_DEFAULTICONは、どうしてもアイコンが取得できなかった場合に使うアイコンリソースです。

う~ん、アイコン回りのややこしさも何とかならないものですかね :roll:

Be Sociable, Share!

TrackBack URL :

No comments yet. Be the first.

Leave a reply