У меня есть ситуация, которую я не знаю, как решить.
У меня есть CDialog
, который поддерживает динамическое изменение размера, и у меня есть статический элемент управления:
Я установил свойства этого элемента управления на Невидимый и Перемещение 100 в обоих направлениях :
Я установил его как невидимый, потому что хочу использовать его как заполнитель . В 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);
}
Кажется, что если элемент управления видим , он не будет двигаться. Но если он виден, он, кажется, перезаписывает мой рендеринг, так как я не вижу свою легенду, нарисованную в диалоге:
Так как я могу вручную нарисовать легенду в правом нижнем углу с помощью OnPaint
в диалоговом окне динамического изменения размера?