내가 메인 윈도우의 WM_PAINT 메시지 처리기에 다음 코드를했다 : 나는 비트 블리트는 메모리 비트 맵 메모리 DC에 보내고있는 이유C++에서 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);
};
, 즉 나는 피부 aswell에 텍스트를 그림됩니다
있어 이 스트레이트 페인팅 (직접 hdc)도 시도했지만 아무도 작동하지 않았고 디버깅 방법을 잘 모릅니다. 내가 확인할 수있는 유일한 것은 LoadBitmap 함수의 반환 값과 BossController :: paint (HWND hwnd, HBITMAP 스킨)의 NULL에 대해 스킨을 검사하는 것이 었습니다. 그리고 BitBlt의 반환 값.
항상 창을 만들 때 선택한 배경색으로 사각형이 표시됩니다. (창은 사용자가 그렇게 한 스킨이 적용된, 어떤 제목 표시 줄 등이 없을 것입니다.
사람이 오류를 지적 할 수있는 경우 또는를 디버깅하는 방법?
삭제 코드가 잘못되었습니다 ... 'hOld *'비트 맵을 삭제하지 마십시오. 대신 삭제하기 전에 DC로 다시 선택하십시오. 나는 그것이 당신의 문제라고 생각하지 않습니다. – rodrigo
@rodrigo 함수를 반환하기 전에 궁극적으로 DC를 삭제할 것이므로 메모리를 DC로 사용하기 때문에 다시 선택해야합니까? – StudentX
+1 제목 : –