WM_PAINT
何らかのイベント (メッセージではなく) に応答して、ウィンドウのクライアント領域にテキストをペイント (描画) しようとしていますWM_PAINT
。WM_PAINT
メッセージが表示される (またはウィンドウが更新される) たびに、ウィンドウが再描画され、外側のすべてWM_PAINT
がもはや問題にならないことを理解しています。コードでよりよくコミュニケーションできるようになると思うので、これが私が今持っているものです。
HDC mdc;
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nFunsterStil)
{
LoadBitmap(...); // for skinning the app.
stuff..
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
BITMAP bm;
HDC dcSkin = CreateCompatibleDC(hdc);
GetObject(hSkinBmp, sizeof(bm), &bm);
SelectObject(dcSkin, hSkinBmp);
BitBlt(dcSkin, 0, 0, wWidth, wHeight, mdc, 0, 0, SRCCOPY);
BitBlt(hdc, 0, 0, wWidth, wHeight, dcSkin, 0, 0, SRCCOPY);
DeleteDC(dcSkin);
EndPaint(hwnd, &ps);
break;
case WM_LBUTTONDOWN;
HDC hdc = GetDC( hwnd );
mdc = CreateCompatibleDC( hdc );
LPRECT rect;
GetClientRect( hwnd, rect);
SelectObject( mdc, CreateCompatibleBitmap( hdc, rect->right, rect->bottom ) );
BitBlt( mdc,0,0,rect->right,rect->bottom,hdc,0,0,SRCCOPY );
HFONT hfont = CreateFont( 0, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, DEFAULT_PITCH | FF_SWISS , 0 );
HFONT hOldFont = (HFONT)SelectObject( mdc, hfont );
SetTextColor( mdc, RGB(255,0,0) );
SetBkColor( mdc, RGB(255,255,0) );
TextOut( mdc, 50, 150, logintext.c_str(), strlen( logintext.c_str() ) );
SelectObject( mdc, hOldFont );
ReleaseDC( hwnd, hdc);
InvalidateRect( hwnd, 0, TRUE );
break;
}
ご覧のとおり、ウィンドウのクライアント領域を bmp でペイントする必要があります。次に、マウス ボタン ダウン メッセージが表示されたら、スキンされたクライアント領域の上にテキストを出力する必要があります。私がやっていることは、WM_LBUTTONDOWN
メッセージで作成されたメモリ DC を保存し、最初にスキン用の DC でウィンドウ DC をペイントしてから、テキスト用の DC (メモリ DC で作成されたものWM_LBUTTONDOWN
) をペイントしようとすることです。
スキン ビットマップは想定どおりに表示されますが、テキストは表示されません。
どうすればこれを達成できますか?