プロが教えるわが家の防犯対策術!

いつもお世話になっております。
現在VC6.0を使ってボタンにアイコンを張ろうとしています。
リソースエディタを使って、ボタン(IDC_BUTTON)とアイコン(IDI_ICON)を
準備し、ボタンのプロパティでアイコンの欄をチェックした後

switch(message)
case WM_INITDIALOG:
{
SendDlgItemMessage(hWnd,
IDC_BUTTON,
BM_SETIMAGE,
IMAGE_ICON,
(LPARAM)GetDlgItem(hWnd, IDI_ICON));
}
return TRUE;

としているのですが、実行するとなぜかボタンを押したときの処理が
繰り返されます。
ダイアログボックスのみのプログラムを作っており、このボタンを
押したらファイル選択画面になるのですが、ずっとファイル選択画面が
ループしてダイアログが表示されません。
デバッグしてみても混合モードというものに入ってよくわかりません。
どうすればボタンにアイコンを乗せる事ができるのでしょうか?
皆さんの知恵を貸してください。

開発環境 VC++6.0
OS    WindowsXP

A 回答 (3件)

★良く見たらLoadIcon()関数じゃなかったね。


・次のリンクを参考にして下さい。
 http://www001.upp.so-net.ne.jp/YandA/WinApiInfo/ …→『アイコンのロード』
 ※LoadImage()でもできますが LoadIcon() 関数の方が使いやすい。
 ※マイクロソフト社では、もう古いから LoadIcon() の使用を推奨していないようだ。

サンプル:
HINSTANCE hInstance; ←インスタンス・ハンドル(WinMainの第一引数)
HICON hIcon; ←アイコンのハンドル

// アイコンの取得
hInstance = (HINSTANCE)(INT64)GetWindowLong( hWnd, GWL_HINSTANCE );
hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(IDI_ICON) );
// アイコンの設定
SendDlgItemMessage( hWnd, IDC_BUTTON, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon );

その他:
hIcon = LoadImage( hInstance, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 0, 0, LR_SHARED );
でもアイコンを取得できます。

※最近見落としが多いみたいです。(恥)
※すみませんね。GetDlgItem() が原因でした。

参考URL:http://www001.upp.so-net.ne.jp/YandA/WinApiInfo/ …
    • good
    • 0
この回答へのお礼

わかりやすく説明していただきありがとうございます。
希望のものを作ることができました。

お礼日時:2008/02/03 21:08

BM_SETIMAGEの場合の lparamはビットマップイメージまたはアイコンイメージのハンドルが必要です


GetDlgItemで取得出来るのはコントロールのウィンドウハンドルです
LoadImageなどを使って表示させたいイメージのハンドルを取得しましょう
    • good
    • 0
この回答へのお礼

ハンドル違いでしたか。
アドバイスのおかげで希望のものができました。
ありがとうございます。

お礼日時:2008/02/03 21:07

★補足要求


>としているのですが、実行するとなぜかボタンを押したときの処理が
>繰り返されます。
 ↑
 これだけでは分かりません。
 WM_COMMANDの部分を載せて下さい。
 またアイコン・ボタンのリソース内容も見たいです。
 ちなみに SendDlgItemMessage() 関数でアイコンの設定方法は合っています。
 WM_INITDIALOG の部分は問題ないと思います。
・それではまた。

この回答への補足

すばやい回答ありがとうございます。
ボタンを押したときの処理が繰り返されるのはとまりました。
ボタンのスタイルの通知の欄にチェックを入れていました。
動作は普通にできます。
ただボタンの四角の中身が空になってしまっています。
アイコン、ボタンのリソース内容ですがリソースビューで作ったので
どれを書けばよいかわからないのですが関係ありそうなのは

// resource.h
#define IDC_BUTTON   1003
#define IDI_ICON105
ボタンはスタイルのアイコンをチェック、
アイコンのサイズは16*16です。

いろいろ調べるととても長いプログラムが多く、これだけではできないのでしょうか?

補足日時:2008/02/03 03:54
    • good
    • 0

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