Я читал много примеров в Интернете, но я все еще застрял. Я пытаюсь обработать сообщение WM_PAINT, отправленное в мое приложение.Обработка WM_PAINT
В моем приложении, я всегда рисую тот же DC, который называется g_hDC
. Он работает отлично. Когда получено WM_PAINT
, я просто попытаюсь нарисовать содержимое моего g_hDC
в DC, возвращаемом BeginPaint
. Думаю, g_hDC
содержит последнее растровое изображение, которое я нарисовал. Поэтому я просто хочу его восстановить.
case WM_PAINT:
PAINTSTRUCT ps;
int ret;
HDC compatDC;
HDC currentDC;
HDC paintDC;
HBITMAP compatBitmap;
HGDIOBJ oldBitmap;
paintDC = BeginPaint(g_hWnd, &ps);
currentDC = GetDC(g_hWnd);
compatDC = CreateCompatibleDC(paintDC);
compatBitmap=CreateCompatibleBitmap(paintDC, CONFIG_WINDOW_WIDTH, CONFIG_WINDOW_HEIGHT);
oldBitmap=SelectObject(compatDC, compatBitmap);
ret = BitBlt(compatDC,
ps.rcPaint.left,
ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
currentDC,
ps.rcPaint.left,
ps.rcPaint.top,
SRCCOPY);
ret = BitBlt(paintDC,
ps.rcPaint.left,
ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
compatDC,
ps.rcPaint.left,
ps.rcPaint.top,
SRCCOPY);
DeleteObject(SelectObject(compatDC, oldBitmap));
DeleteDC(compatDC);
DeleteDC(currentDC);
EndPaint(g_hWnd, &ps);
break;
Но он просто рисует белый прямоугольник ... Я пробовал много возможностей и ничего не работает. Не могли бы вы мне помочь?
C++ тег не верный. Измените его на Win32. – i486
Вы ничего не нарисовали в compatBitmap - что вы ожидаете увидеть после BitBlt? Предположим, что должен быть «шум», то есть случайное изображение. – i486
Я удалил тег C++. Я просто вижу белый прямоугольник на месте перекрывающегося окна. – vfloyd