メイン ウィンドウの WM_PAINT メッセージ ハンドラに次のコードがあります。
void BossController::paint ( HWND hwnd, HBITMAP skin )
{
PAINTSTRUCT ps;
HDC hdc;
hdc = BeginPaint ( hwnd, &ps );
HDC dcSkin = CreateCompatibleDC ( hdc ); // memory dc for skin
HDC hMemDc = CreateCompatibleDC ( hdc ); // memory dc for painting
HBITMAP hmemBmp = CreateCompatibleBitmap ( hdc, width, height ); // Create bitmap to draw on
HBITMAP hOldMemBmp = (HBITMAP)SelectObject ( hMemDc, hmemBmp ); // select memory bitmap in memory dc
HBITMAP hOldSkinBmp = (HBITMAP)SelectObject ( dcSkin, skin ); //select skin bitmap in skin memory dc
BitBlt ( hMemDc, 0, 0, width, height, dcSkin, 0, 0, SRCCOPY ); // Paint Skin on Memory DC
BitBlt ( hdc, 0, 0, width, height, hMemDc, 0, 0, SRCCOPY ); // Paint Skin on Window DC
DeleteObject ( hOldSkinBmp );
DeleteObject ( hOldMemBmp );
DeleteObject( hmemBmp );
DeleteDC ( hMemDc );
DeleteDC ( dcSkin );
EndPaint ( hwnd, &ps );
};
スキンにもテキストをペイントします。そのため、メモリ ビットマップを使用してメモリ DC で BitBlt を実行しています。ストレート ペイント (直接 hdc に) も試しましたが、うまくいきませんでした。また、デバッグ方法がわかりません。それ。私が確認できた唯一のことは、LoadBitmap 関数の戻り値と void BossController::paint ( HWND hwnd, HBITMAP skin ) で NULL に対してスキンを確認することでした。そして BitBlt の戻り値。
ウィンドウの作成中に選択した背景色の長方形が常に表示されます。(ウィンドウはカスタム スキンなので、タイトル バーなどはありません。
誰かがエラーや潜在的な落とし穴、またはそれをデバッグする方法を指摘できますか?