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メッセージを発行するので、結果として描画できます。
Comments