プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
只今、小生WindowsXPSP3上で、C言語とWin32APIを使い、BCC5.5.1でコンパイルし、Windowsプログラミングを勉強しています。

今回質問させて頂きたいのは、
「ウィンドウにアイコンを描画する際、
 BitBlt関数の第4・5引数に指定する転送元画像の幅と高さを取得する
 際にはどうすればいいか」
です。

例えば、ビットマップ画像の幅、高さを取得する際は、

GetObject(hBitmap, (int)sizeof(BITMAP), &bmp_info);
をして、
w = bmp_info.bmWidth;
h = bmp_info.bmHeight;

とし、x, yをBitBlt関数の第4・5引数に指定する方法というのは知っているのですが、アイコンの場合はどのようにして、幅、高さを求められるのでしょうか??

先輩方、ご教授宜しくお願い致します。

A 回答 (2件)

 こんばんは。



 GetIconInfo()APIです。
 
 http://msdn.microsoft.com/ja-jp/library/cc364668 …
 http://msdn.microsoft.com/en-us/library/ms648052 …

//TRUE->アイコン、FALSE->カーソル
ICONINFO ici = {TRUE};
::GetIconInfo(hIcon, &ici);

//ICONINFO::hbmColorメンバにビットマップハンドルが入っている
BITMAP bmp;
::GetObject(ici.hbmColor, sizeof(bmp), &bmp);

この回答への補足

早速ご回答頂き、誠にありがとうございます。

記述していただいた、コードの流れは以下の解釈でよろしいでしょうか??

BITMAP bmp;
//ICONINFOをアイコンに設定
ICONINFO ici = TRUE;

//GetIconInfoを使用し、アイコンの情報を取得
GetIconInfo(hIcon, &ici);

//iciメンバの中のhbmColorから、アイコンのビットマップ情報を取得
GetObject(ici.hbmColor, sizeof(bmp), &bmp);

以上です。

お忙しい中、申し訳ございませんが、ご確認の程、宜しくお願いします。

補足日時:2010/02/21 20:13
    • good
    • 0

 こんばんは。

補足頂きました。

 コンパイラによるかもしれませんが、構造体の初期化子である{}を使用しない場合は、
 ici.fIcon = TRUE;
 と書いて下さい(当方はVisualStudio2008を使用しています)。

 解釈は全て合っています。
    • good
    • 0
この回答へのお礼

お忙しい中、ご回答頂き誠にありがとうございます。

記述させて頂いた内容もご確認頂き、お世話になります。

早速、頂いたアドバイスを基にコードを書こうと思います。

本当にありがとうございました!

お礼日時:2010/02/22 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!