子ウィンドウの作成2

アプリケーションのウィンドウの内部に配置するボタンなどのGUI部品も、
通常は子ウィンドウの形で作ります。


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の下位ワードに入っているので、
この値からクリックされたボタンを特定できます。

070403.jpg
Windows > ウィンドウの作成 | comments (0) | trackbacks (0)

Comments

Comment Form

icons:

Trackbacks