• ベストアンサー

ボタンの表示変更方法

いつもお世話になっております。 現在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

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★良く見たらLoadIcon()関数じゃなかったね。 ・次のリンクを参考にして下さい。  http://www001.upp.so-net.ne.jp/YandA/WinApiInfo/LoadIcon.htm→『アイコンのロード』  ※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/LoadIcon.htm
iec1128
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

BM_SETIMAGEの場合の lparamはビットマップイメージまたはアイコンイメージのハンドルが必要です GetDlgItemで取得出来るのはコントロールのウィンドウハンドルです LoadImageなどを使って表示させたいイメージのハンドルを取得しましょう

iec1128
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

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

iec1128
質問者

補足

すばやい回答ありがとうございます。 ボタンを押したときの処理が繰り返されるのはとまりました。 ボタンのスタイルの通知の欄にチェックを入れていました。 動作は普通にできます。 ただボタンの四角の中身が空になってしまっています。 アイコン、ボタンのリソース内容ですがリソースビューで作ったので どれを書けばよいかわからないのですが関係ありそうなのは // resource.h #define IDC_BUTTON   1003 #define IDI_ICON 105 ボタンはスタイルのアイコンをチェック、 アイコンのサイズは16*16です。 いろいろ調べるととても長いプログラムが多く、これだけではできないのでしょうか?

すると、全ての回答が全文表示されます。