Примерно через 10 минут после того, как я спросил об этом, я прочитал свой собственный комментарий и понял, что «некоторые окна» означают, что он связан с передаваемыми окнами. В частности, шрифт, используемый из указанного окна.Шрифты со свойствами по умолчанию демонстрировали странное смешивание.
В конце дня я решил, что мне нужно изменить шрифт, чтобы отключить все, что портит мой чертежный код.В конце концов я сузил его до одного виновника, вызвавшего проблему:
CClientDC dc(pWnd);
CDC memDC;
if(!memDC.CreateCompatibleDC(&dc))
return NULL;
LOGFONT tempFont;
CFont* winFont = pWnd->GetFont();
if (winFont)
winFont->GetLogFont(&tempFont);
else
{
// generate a likely font
SecureZeroMemory(&tempFont, sizeof(LOGFONT));
//TEXTMETRIC txt;
//GetTextMetrics(memDC, &txt);
//tempFont.lfHeight = txt.tmHeight * -1; // 16 is too big looking
tempFont.lfHeight = -12;
tempFont.lfWeight = FW_NORMAL;
tempFont.lfCharSet = DEFAULT_CHARSET;
wcscpy_s(tempFont.lfFaceName, L"Segoe UI"); // Win7 control default
}
tempFont.lfQuality = NONANTIALIASED_QUALITY; // this is the fix!!!
CFont newFont;
newFont.CreateFontIndirect(&tempFont);
CFont* pOldFont = memDC.SelectObject(&newFont);
// ... other stuff same as before ...
Так что я все еще FillSolidRect
розового цвета, затем рисую свои значки, текст, все, что я хочу, и т. Д. Затем замаскирую розовые пиксели.С регулировкой качества шрифта он больше не смешивается с текстом шрифта и выглядит хорошо.В другом случае, приведенном выше, создается шрифт по умолчанию, который будет использоваться в случае, если переданный CWnd*
не имеет правильного указанного.