Итак, как я могу вручную нарисовать легенду в правом нижнем углу с помощью OnPaint в диалоговом окне динамического изменения размера? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть ситуация, которую я не знаю, как решить.

У меня есть CDialog, который поддерживает динамическое изменение размера, и у меня есть статический элемент управления:

Static Control

Я установил свойства этого элемента управления на Невидимый и Перемещение 100 в обоих направлениях :

Properties

Я установил его как невидимый, потому что хочу использовать его как заполнитель . В OnPaint я делаю следующее:

void CAssignmentsDlg::OnPaint() 
{
    CResizingDialog::OnPaint();

    CPaintDC dc(this); // device context for painting

    COLORREF    crTextHL, crBackHL;
    COLORREF    crTextOld, crBackOld;
    CString     strText;

    EstablishLegendPosition();

    crBackHL = ::GetSysColor(COLOR_HIGHLIGHT);
    crTextHL = ::GetSysColor(COLOR_HIGHLIGHTTEXT);

    dc.FillSolidRect(m_rcKey, crBackHL);

    crBackOld = dc.SetBkColor(crBackHL);
    crTextOld = dc.SetTextColor(crTextHL);

    strText.LoadString( IDS_STR_SAMPLE_CONFLICT );
    CFont l_font;
    l_font.CreateFont(14, 0, 0, 0, FW_NORMAL,
        FALSE, FALSE, FALSE, 0, 
        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,   
        DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("Arial"));

    CFont* l_old_font = dc.SelectObject(&l_font);

    dc.DrawText( strText, m_rcKey, DT_SINGLELINE|DT_CENTER|DT_VCENTER );

    dc.SetBkColor(crBackOld);
    dc.SetTextColor(crTextOld);

    // Delete the font object. 
    dc.SelectObject(l_old_font);
    l_font.DeleteObject();
}

EstablishLegendPosition определяется следующим образом:

void CAssignmentsDlg::EstablishLegendPosition()
{
    // establish position of key
    m_lblKey.GetClientRect(m_rcKey);
    m_lblKey.ClientToScreen(m_rcKey);
    ScreenToClient(m_rcKey);
}

Кажется, что если элемент управления видим , он не будет двигаться. Но если он виден, он, кажется, перезаписывает мой рендеринг, так как я не вижу свою легенду, нарисованную в диалоге:

Result

Так как я могу вручную нарисовать легенду в правом нижнем углу с помощью OnPaint в диалоговом окне динамического изменения размера?

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