WM_L(R)BUTTONDOWNメッセージ


LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
 HDC hdc;
 char str[256];

 switch ( message ) {
 case WM_LBUTTONDOWN:
  wsprintf( str, "左クリックされた" );
  hdc = GetDC( hWnd ); // デバイスコンテキスト生成
  TextOut( hdc, 1, 1, str, lstrlen( str ) );
  ReleaseDC( hWnd, hdc ); // デバイスコンテキスト解放
  break;
 case WM_RBUTTONDOWN:
  wsprintf( str, "右クリックされた" );
  hdc = GetDC( hWnd ); // デバイスコンテキスト生成
  TextOut( hdc, 1, 1, str, lstrlen( str ) );
  ReleaseDC( hWnd, hdc ); // デバイスコンテキスト解放
  break;
 }
 return 0;
}

Windows > ウィンドウプロシージャ | comments (0) | trackbacks (0)

WM_MOUSEMOVEメッセージ


LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
 HDC hdc;
 int xPos;
 int yPos;
 char str[256];

 switch ( message ) {
 case WM_MOUSEMOVE:
  xPos = ( int )LOWORD( lParam );
  yPos = ( int )HIWORD( lParam );
  wsprintf( str, "x=%03d y=%03d", xPos, yPos );
  hdc = GetDC( hWnd ); // デバイスコンテキスト生成
  TextOut( hdc, 1, 1, str, lstrlen( str ) );
  ReleaseDC( hWnd, hdc ); // デバイスコンテキスト解放
  break;
 }
 return 0;
}

Windows > ウィンドウプロシージャ | comments (0) | trackbacks (0)

WM_KEYDOWNメッセージ


LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
 HDC hdc; // デバイスコンテキストのハンドル
 static char str[128] = "";
 static int position = 0;

 switch ( message ) {
 case WM_KEYDOWN:
  str[ position++ ] = ( char )wParam;
  hdc = GetDC( hWnd ); // デバイスコンテキスト生成
  TextOut( hdc, 1, 1, str, position );
  ReleaseDC( hWnd, hdc ); // デバイスコンテキスト解放
  break;
 }
 return 0;
}



LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
 PAINTSTRUCT ps;
 HDC hdc;
 static int xPos = 1;
 static int yPos = 1;
 static int delta = 10; // 増減幅
 LPCSTR target = "+";

 switch ( message ) {
 case WM_KEYDOWN:
  switch ( wParam ) {
  case VK_RIGHT:
   xPos += delta;
   InvalidateRect( hWnd, NULL, 1 );
   break;
  case VK_LEFT:
   xPos -= delta;
   InvalidateRect( hWnd, NULL, 1 );
   break;
  case VK_UP:
   yPos -= delta;
   InvalidateRect( hWnd, NULL, 1 );
   break;
  case VK_DOWN:
   yPos += delta;
   InvalidateRect( hWnd, NULL, 1 );
   break;
  }
  break;
 case WM_PAINT: // メイン ウィンドウの描画
  hdc = BeginPaint( hWnd, &ps );
  // TODO: 描画コードをここに追加してください...
  TextOut( hdc, xPos, yPos, target, lstrlen( target ) );
  EndPaint( hWnd, &ps );
  break;
 }
 return 0;
}


InvalidateRectでウインドウのクライアント領域を破棄する命令を
Windowsに対して出します。
WindowsはWM_PAINTメッセージを発行するので、結果として描画できます。
Windows > ウィンドウプロシージャ | comments (0) | trackbacks (0)

WM_PAINTメッセージ


LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
 PAINTSTRUCT ps;
 HDC hdc;
 char str[] = "test";

 switch ( message ) {
 case WM_PAINT: // メイン ウィンドウの描画
  hdc = BeginPaint( hWnd, &ps );
  // TODO: 描画コードをここに追加してください...
  TextOut( hdc, 1, 1, str, ( int )strlen( str ) );
  EndPaint( hWnd, &ps );
  break;
 }
 return 0;
}


このメッセージは、自分の作成したウインドウが再描画された場合に
使用するメッセージで、プログラマが「ウインドウ画面が再描画されたら〜したい」
という場合にこのメッセージを使用する事になります。

<主にウインドウが再描画される場合>
・ウインドウのサイズを変更した場合
・最初にウインドウが作成されWM_CREATEが検出された後
・自分の作成したウインドウがアクディブ・ウインドウに切り替わった場合
Windows > ウィンドウプロシージャ | comments (0) | trackbacks (0)