1

メイン ウィンドウの 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 の戻り値。

ウィンドウの作成中に選択した背景色の長方形が常に表示されます。(ウィンドウはカスタム スキンなので、タイトル バーなどはありません。

誰かがエラーや潜在的な落とし穴、またはそれをデバッグする方法を指摘できますか?

4

1 に答える 1