Я пишу код и как он работает, но не знаю почему. Может кто-нибудь объяснить мне, пожалуйста.
Я пытался отображать изображения камня go при каждом щелчке мышью. Главный вопрос: почему CreateCompatibleDC
не стирает hdcMemSurface. Извините за плохой Engli sh. Я новичок в stackoverflow.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static POINT pt{};
static bool DrawBlackRock = false, DrawWhiteRock = false;
switch (message)
{
case WM_CREATE:
{
const HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
images[0] = loadImage(TEXT("gameboard.bmp"), hInstance);
images[1] = loadImage(TEXT("black.bmp"), hInstance);
images[2] = loadImage(TEXT("white.bmp"), hInstance);
SetWindowPos(hWnd, HWND_TOP, NULL, NULL, images[0].width + 15, images[0].height + 57, SWP_NOMOVE);
}
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_LBUTTONDOWN:
{
DrawBlackRock = !(DrawBlackRock);
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, TRUE);
RedrawWindow(hWnd, NULL, 0, RDW_INVALIDATE);
break;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
static HDC hdcMemSurface = CreateCompatibleDC(hdc);
static HDC hdcRock = CreateCompatibleDC(hdc);
SelectObject(hdcMemSurface, images[0].hBitmap);
BitBlt(hdc, 0, 0, images[0].width, images[0].height, hdcMemSurface, 0, 0, SRCCOPY);
if (DrawBlackRock && (!DrawWhiteRock))
{
SelectObject(hdcRock, images[1].hBitmap);
BitBlt(hdc, pt.x, pt.y, images[1].width, images[1].height, hdcRock, 0, 0, SRCCOPY);//создать контекст с boardstate
}
//SelectObject(hdcMemSurface, hdc);
BitBlt(hdcMemSurface, 0, 0, images[0].width, images[0].height, hdc, 0, 0, SRCCOPY);
//ValidateRect(hWnd, NULL);
EndPaint(hWnd, &ps);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
РЕДАКТИРОВАТЬ: добавить несколько изображений и добавить некоторые детали Я недооцениваю все, кроме:
static HDC hdcMemSurface = CreateCompatibleDC(hdc);
static HDC hdcRock = CreateCompatibleDC(hdc);
Если я позвоню CreateCompabilityDC
, как только он перестанет работать правильно и несмотря на stati c erase hdcMemSurface
и hdcRock
, мне нужно вызывать его каждый раз в WM_PAINT, это должно привести к стиранию hdcMemSurface
и hdcRock
, но не ведут. Меня это расстраивает.
введите описание изображения здесь
введите описание изображения здесь