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)

Comments

Comment Form

icons:

Trackbacks