アプリ版:「スタンプのみでお礼する」機能のリリースについて

開発環境: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);
}

A 回答 (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;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

おかげさまで、アイコン表示することが出来ました。簡単な所で間違っていたのですね。申し訳ない。

ネット検索したところ、SendDlgItemMessage()が使われてたので、こちらを使っていました。やはり、SendMessage()で良いのですね。大変ためになり、助かりました。ありがとうございました。

お礼日時:2012/08/22 09:20

>        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はおなじものになっていますか?

この回答への補足

早速の回答ありがとうございます。

申し訳ありません。質問時の記述ミスです。
プログラムでは、同じになっていますが表示されません。

補足日時:2012/08/21 18:47
    • good
    • 0

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