Как разрешить псевдоним текста в элементах управления MFC - PullRequest
3 голосов
/ 20 ноября 2011

Я в настоящее время на втором этапе разработки для проекта управления данными, с которым я связан;на данный момент мы находимся в стадии обновления GUI (мы собираемся для офиса 2007-тематический GUI).

В настоящее время у меня есть только опыт работы с проектами MFC на основе диалога, откуда он переносится, откуда мы перетаскиваем элементы управления в диалоговое окно, а затем получаем их дескрипторы с помощью команды GetDlgItem, используяИдентификаторы элементов управления.

Теперь мы используем SDI вместо проекта на основе диалога, и, таким образом, требуется процедурное создание элементов управления.У меня не было проблем с созданием и отображением элементов управления в области ChildView;Тем не менее, текст очень низкого качества и псевдоним.Я погуглил проблему, но не смог найти ничего особенно подходящего для этой проблемы, действительно, единственное, что имело какое-либо реальное значение, это использование GDI + для рисования сглаженного текста, что хорошо для простого текста, но мне нужны такие элементы управления MFC, каккак CEdit и CListBox.

Вот изображение, которое поможет проиллюстрировать мою проблему: enter image description here

Я создаю как статический текст 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 );
}

1 Ответ

4 голосов
/ 20 ноября 2011

Измените шрифт, используемый окном редактирования, он просто выглядит ужасно по умолчанию.

Если вы хотите получить «стандартный» шрифт, см., Например, SystemParametersInfo с аргументом SPI_GETNONCLIENTMETRICS.Конечно, вы можете использовать любой другой шрифт, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...