子ウィンドウの作成2
アプリケーションのウィンドウの内部に配置するボタンなどのGUI部品も、
通常は子ウィンドウの形で作ります。
ButtonなどWindowsに用意されているGUI部品のウィンドウを作る際には
Windowsにあらかじめ用意されているウィンドウクラスを使います。
追加されたボタンはWM_COMMANDメッセージを送ってきます。
hMenuの値がwParamの下位ワードに入っているので、
この値からクリックされたボタンを特定できます。

通常は子ウィンドウの形で作ります。
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
char str[256];
static HWND hwButton0, hwButton1;
static int iMode =0;
switch (message) {
case WM_CREATE:
hwButton0 = CreateWindow( "Button", "Button0", WS_CHILD | WS_VISIBLE, 16, 8, 80, 24, hWnd, ( HMENU )0, hInst, NULL);
hwButton1 = CreateWindow( "Button", "Button1", WS_CHILD | WS_VISIBLE, 108, 8, 80, 24, hWnd, ( HMENU )1, hInst, NULL);
break;
case WM_COMMAND:
switch ( LOWORD( wParam ) ) { // クリックされたボタン判別
case 0: // hwButton0
iMode = 0;
InvalidateRect( hWnd, NULL, TRUE );
break;
case 1: // hwButton1
iMode = 1;
InvalidateRect( hWnd, NULL, TRUE );
break;
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 描画コードをここに追加してください...
wsprintf( str, "押されたボタンは%d", iMode );
TextOut( hdc, 16, 40, str, ( int )strlen( str ) );
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
ButtonなどWindowsに用意されているGUI部品のウィンドウを作る際には
Windowsにあらかじめ用意されているウィンドウクラスを使います。
追加されたボタンはWM_COMMANDメッセージを送ってきます。
hMenuの値がwParamの下位ワードに入っているので、
この値からクリックされたボタンを特定できます。

Comments