Я обновляю старый проект MFC для использования MFC Feature Pack и ленты. Я изменил панель, производную от CControlBar, чтобы она была производной от CDockablePane, и она отлично работает, однако она все еще выглядит старой и не сочетается с внешним видом ленты и темой. На панели также есть кнопки, которые все еще выглядят старыми.
Как изменить внешний вид, стиль или тему производного объекта CDockablePane и кнопок, полученных из CButton?
Я использую следующий код, чтобы нарисовать кнопку, это лучший способ просто изменить фон?
void CFolderButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
UINT uState=DFCS_BUTTONPUSH;
if( lpDrawItemStruct->itemState & ODS_SELECTED )
{
uState|=DFCS_PUSHED;
}
//CDC dc;
CDC* dc = CDC::FromHandle(lpDrawItemStruct->hDC);dc->DrawFrameControl(&lpDrawItemStruct->rcItem,DFC_BUTTON,uState);
if( !IsWindowEnabled() )
{
dc->SetTextColor(::GetSysColor(COLOR_3DSHADOW));
}
CString csText;
GetWindowText(csText);
if (m_iDisplayType != 2 || !m_hIcon)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = m_iFontSize;
strcpy(lf.lfFaceName, "Tahoma Bold");
VERIFY(font.CreateFontIndirect(&lf));
CFont* def_font = dc->SelectObject(&font);
RECT buttonRect = lpDrawItemStruct->rcItem;
buttonRect.left += 10;
buttonRect.right += 10;
if (m_iDisplayType != 1 || !m_hIcon) //text & Icon
{
buttonRect.left += 30;
buttonRect.right += 30;
}
dc->DrawText(csText,&buttonRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
dc->SelectObject(def_font);
font.DeleteObject();
}if (m_hIcon && m_iDisplayType != 1)
{
CSize czText = dc->GetTextExtent(csText);
dc->DrawIcon(0,0,m_hIcon);
}
}
На следующем рисунке показан контраст между кнопками и лентой:
Новый MFC использует CMFCVisualManager. И рисование с использованием текущих стилей не так просто.
Этот класс является виртуальным и используется для всех рисунков в определенном стиле приложения.
Просто посмотрите на источник CMFCToolBarButton :: OnDraw и посмотрите, как отображаются все виды кнопок и текста.
PS: Может быть, проще создать новый CMFCToolBar, если в нем есть только кнопки и элементы управления.
PPS: или встроить новый CMFCToolBar в панель CDocking.