開発環境:Vista Visual Studio2012 C言語
CreateWindowで作成したボタンを、アイコン表示にしたいのですけれど上手くいきません。
どこが悪いのでしょうか?
HWND CreatePushButton(HWND hwnd, int x, int y, int w, int h, LPCTSTR caption, int id)
{
return CreateWindow(
_T("BUTTON"),
caption,
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON ;
x, y,
w, h,
hwnd,
(HMENU)(INT_PTR)id,
G_hInst,
NULL
);
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hButton;
static HICON m_hIcon;
switch (uMsg) {
case WM_CREATE: //ウィンドウが作られたとき
hButtonREC = CreatePushButton( hwnd,
20, 20,
80, 40,
_T("テスト"),
ID_BUTTON );
m_hIcon = LoadIcon( NULL , IDI_ERROR );
SendDlgItemMessage( hButtonREC,
ID_BUTTON_RCE,
BM_SETIMAGE,
IMAGE_ICON,
(LPARAM)m_hIcon);
}
No.2ベストアンサー
- 回答日時:
>申し訳ありません。
質問時の記述ミスです。では……
>static HWND hButton;
>hButtonREC = CreatePushButton( hwnd,
>SendDlgItemMessage( hButtonREC,
はどうでしょう?
というか…
SendDlgItemMessage()ではなく、直前でCreateWindw()してボタンのHWNDが判っているのですから
直接SendMessage()すればよいのではありませんか?
SendDlgItemMessage()だとしたら…
SendDlgItemMessage(hwnd, ID_BUTTON_RCE, BM_SETIMAGE, IMAGE_ICON, (LPARAM)m_hIcon);
じゃありませんか?
# 第1引数(親ウィンドウ)に注意。
VS2005ですが…
スケルトンで作成されたWndProc()に
下記を追加しただけでボタンにアイコン表示されていますが……。
static HWND hButton;
static HICON hIcon;
case WM_CREATE:
hButton = CreateWindow(_T("BUTTON"), _T("テスト"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_ICON, 20, 200, 40, 40, hWnd, (HMENU)1234, hInst, NULL);
hIcon = LoadIcon(NULL, IDI_ERROR);
SendMessage(hButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
break;
回答ありがとうございます。
おかげさまで、アイコン表示することが出来ました。簡単な所で間違っていたのですね。申し訳ない。
ネット検索したところ、SendDlgItemMessage()が使われてたので、こちらを使っていました。やはり、SendMessage()で良いのですね。大変ためになり、助かりました。ありがとうございました。
No.1
- 回答日時:
> hButtonREC = CreatePushButton( hwnd,
> 20, 20,
> 80, 40,
> _T("テスト"),
> ID_BUTTON );
ボタンを作成する時のIDは「ID_BUTTON」。
> SendDlgItemMessage( hButtonREC,
> ID_BUTTON_RCE,
> BM_SETIMAGE,
> IMAGE_ICON,
> (LPARAM)m_hIcon);
アイコンを設定する時のIDは「ID_BUTTON_RCE」ですが、
ID_BUTTONとID_BUTTON_RCEはおなじものになっていますか?
この回答への補足
早速の回答ありがとうございます。
申し訳ありません。質問時の記述ミスです。
プログラムでは、同じになっていますが表示されません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- MySQL MYSQL エラー 2 2022/10/18 11:37
- PHP php エラー 2 2022/10/23 16:43
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エディットボックスの背景の色...
-
この列挙体でsysjanの関数はあ...
-
画像を表示したいのですが……
-
不明なエラー
-
エラー Run-Time Check Failur...
-
COMPORTマルチスレッドで例外発生
-
子ウインドウの作成と破棄について
-
エディットコントロール入力時...
-
音量調節
-
WM_CREATE について
-
プログラミングでエラーが出ま...
-
Enterキーを押されたら次の処理...
-
fgetsなどのときのstdinのバッ...
-
マイナスからプラスへ転じた時...
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
「an=(n-1)/(n+1)のときlim[n→∞...
-
c言語で、繰り返し文の中で、0....
-
C言語での引数の省略方法
-
正負を反転させて出力するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Win32APIでウィンドウを中央に...
-
オーバーレイみたいな処理がしたい
-
ダイアログプログラムでEnterキ...
-
キャレットの現在位置の表示 (W...
-
PeekMessageについて
-
ウィンドウ非表示に時に表示し...
-
C#のswitch文を簡略化したいの...
-
C言語win32api、エディットボッ...
-
音量調節
-
LoadImageを使用し、タイトルバ...
-
プログラミングでエラーが出ま...
-
エディットコントロール入力時...
-
ウィンドウハンドルがメッセー...
-
ボタンの色(WINAPI)
-
画像を表示したいのですが……
-
WINAPIでキーから文字列を入力...
-
エラー Run-Time Check Failur...
-
エディットボックスの背景の色...
-
Win32APIでアイコンファイルを...
-
WM_KEYDOWNでPrtScを捕まえる方...
おすすめ情報