Итак, я рисую растровое изображение, вот мой код:
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, g_hBitmap);
GetObject(g_hBitmap, sizeof(bm), &bm);
BitBlt(hdc, 196 - (bm.bmWidth/2), 90, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem);
Иногда, когда я рисую его с помощью этого кода, растровое изображение не отображается.Хотя, если я сверну / сверну окно, отобразится растровое изображение.Я почти уверен, что с моим кодом нет проблем, так что я должен что-то делать?
EDIT :
Оказывается, это не просто растровые изображения, если я рисую текст с помощью TextOut
, иногда он не отображается, пока не будет свернут / минимизирован.Я не думаю, что минимизация / минимизация посылает еще одно WM_PAINT
сообщение, поэтому я не думаю, что когда я это делаю, это заставляет его перекрашиваться правильно.
О, а остальные элементы управления окрашиваются нормальнопросто материал внутри WM_PAINT не закрашен.
ОБНОВЛЕНИЕ
Вот код, вызывающий проблемы, он также работает в 98% случаев.
// This is a global variable
bool GlobalVar = false;
// This is a different thread started with _beginthread
void ThreadExample()
{
GlobalVar = true;
InvalidateRect(hMainWnd, NULL, TRUE);
_endthread();
}
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (GlobalVar == true)
{
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, 0x0000ff);
OrigFont = SelectObject(hdc, g_hLargeFont);
GetTextExtentPoint32(hdc, ErrorMsg, lstrlen(ErrorMsg), &sz);
TextOut(hdc, 196 - (sz.cx/2), 100, ErrorMsg, lstrlen(ErrorMsg));
SelectObject(hdc, OrigFont);
}
EndPaint(hWnd, &ps);
break;
EDIT2:
Еще одна важная деталь: в моем реальном приложении этот код находится внутри оператора if
, который проверяет глобальную переменную и рисует, если ееправда.И эта переменная устанавливается из другого потока, и после того, как переменная установлена, я вызываю InvalidateRect(hMainWnd, NULL, TRUE);
Обновлен мой пример кода, чтобы представить это.