Я недавно разрабатывал свою собственную библиотеку GUI. Окно создается с использованием Win32 API, а затем внутри него создается Direct2D RenderTarget. Все рисование (кнопки, метки и т. Д.) Происходит внутри RenderTarget. Все хорошо, за исключением качества текста. Когда я смотрю на кнопки Visual Studio, например, текст выглядит так ясно по сравнению с DirectWrite методом DrawTextW ().
Вот пример изображения:
Я использую DirectWrite для непосредственного рисования текста.
`
ID2D1SolidColorBrush* brush;
RenderTarget->CreateSolidColorBrush(D2D1::ColorF(red, green, blue, alpha), &brush);
IDWriteTextFormat* format;
HRESULT h = WriteFactory->CreateTextFormat(std::wstring(font.begin(), font.end()).c_str(), NULL, fontWeight,
fontStyle, DWRITE_FONT_STRETCH_NORMAL, fontSize, L"", &format);
// Center the text horizontally and vertically.
format->SetTextAlignment(textAllignment);
format->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
// Draw text
RenderTarget->DrawTextW(std::wstring(text.begin(), text.end()).c_str(), std::wstring(text.begin(), text.end()).size(), format, D2D1::RectF(xPos, yPos, xPos+width, yPos+height), brush);
brush->Release();
format->Release();
`
Мне просто интересно, это то, что я должен просто принять и двигаться дальше, или я должен что-то настроить с DWriteFactory?
Похоже, у вас монитор с высоким DPI и вы не определили правильный манифест для вашего исполняемого файла. По умолчанию Windows будет думать, что ваше приложение разработано для старых систем 96ppi, и поэтому каждый «пиксель» будет охватывать четыре физических пикселя, если ваш монитор использует, например, 192ppi.
Проверьте это для того, чтобы добавить осведомленность с высоким DPI к вашему заявлению.
В Visual Studio 2015 и выше в настройках проекта есть флаг: «Свойства конфигурации> Инструмент манифеста> Ввод и вывод> DPI Awareness»
Других решений пока нет …