Я в настоящее время на втором этапе разработки для проекта управления данными, с которым я связан;на данный момент мы находимся в стадии обновления GUI (мы собираемся для офиса 2007-тематический GUI).
В настоящее время у меня есть только опыт работы с проектами MFC на основе диалога, откуда он переносится, откуда мы перетаскиваем элементы управления в диалоговое окно, а затем получаем их дескрипторы с помощью команды GetDlgItem
, используяИдентификаторы элементов управления.
Теперь мы используем SDI вместо проекта на основе диалога, и, таким образом, требуется процедурное создание элементов управления.У меня не было проблем с созданием и отображением элементов управления в области ChildView
;Тем не менее, текст очень низкого качества и псевдоним.Я погуглил проблему, но не смог найти ничего особенно подходящего для этой проблемы, действительно, единственное, что имело какое-либо реальное значение, это использование GDI + для рисования сглаженного текста, что хорошо для простого текста, но мне нужны такие элементы управления MFC, каккак CEdit
и CListBox
.
Вот изображение, которое поможет проиллюстрировать мою проблему:
Я создаю как статический текст GDI +, так и элемент управления MFC в OnPaint
функция, как показано ниже:
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Gdiplus::Graphics graphics(dc);
static Gdiplus::FontFamily* fontFamily = new Gdiplus::FontFamily( _T("Segoe UI") );
static Gdiplus::Font* font = new Gdiplus::Font( fontFamily, 12, Gdiplus::FontStyle::FontStyleRegular, Gdiplus::Unit::UnitPixel );
static Gdiplus::SolidBrush* solidBrush = new Gdiplus::SolidBrush( Gdiplus::Color::RoyalBlue );
Gdiplus::PointF point( 10, 10 );
graphics.SetTextRenderingHint( Gdiplus::TextRenderingHint::TextRenderingHintAntiAlias );
graphics.DrawString( _T("Hello, World!"), 13, font, point, solidBrush );
// TODO: Add your message handler code here
CEdit* pEditBox = new CEdit();
pEditBox->CreateEx( WS_EX_CLIENTEDGE, _T("EDIT"), _T("Why is this text so poor?"), WS_BORDER | WS_CHILD | WS_VISIBLE, CRect(100, 100, 300, 200), this, UINT_MAX-9 );
// Do not call CWnd::OnPaint() for painting messages
}
В данный момент мне интересно, нужно ли выводить каждый из элементов управления и изменять их методы рендеринга для использования сглаженного текста GDI +.Надеюсь, это более простой способ решения этой проблемы.
Я буду чрезвычайно признателен за любую помощь / совет.
Заранее спасибо!
РЕДАКТИРОВАТЬ: просто для справки,Для решения этой проблемы я использовал следующее:
CFont* pFont = new CFont();
pFont->CreatePointFont( 120, _T("Segoe UI") );
CEdit* pEditBox = new CEdit();
pEditBox->CreateEx( WS_EX_CLIENTEDGE, _T("EDIT"), _T("Test Edit"), WS_BORDER | WS_CHILD | WS_VISIBLE, CRect(100, 100, 300, 200), this, UINT_MAX-9 );
pEditBox->SetFont( pFont );
В качестве альтернативы следующее позволяет использовать шрифт по умолчанию для используемого окна:
CEdit* pEditBox = new CEdit();
pEditBox->CreateEx( WS_EX_CLIENTEDGE, _T("EDIT"), _T("This text is no longer poor"), WS_BORDER | WS_TABSTOP | WS_CHILD | WS_VISIBLE, CRect(100, 100, 300, 200), this, UINT_MAX-9 );
if( ::IsWindow( pEditBox->GetSafeHwnd() ) )
{
::SendMessage( pEditBox->GetSafeHwnd(), WM_SETFONT, (WPARAM)(HFONT)GetStockObject(DEFAULT_GUI_FONT), FALSE );
}