0
我正在升级旧的MFC项目以使用MFC功能部件包和功能区。我改变了一个从CControlBar派生的窗格,它是从CDockablePane派生出来的,并且它很好用,但是它看起来仍然很旧,并且不会与功能区外观和主题相融合。该窗格还有按钮,仍然看起来很老。MFC 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);
}
}
以下图像显示的按钮和带之间的对比:
这些按钮打开允许显示CTreeCtrl对象,所以我不认为工具栏会有用,感谢输入,我会研究它。 – Jak 2014-10-08 09:04:47
好吧,比添加CMFCToolBar到您的对接窗格...此控制知道如何绘制自己;) – xMRi 2014-10-08 09:24:10
我真的很想不要重做所有的代码...我使用\t CMFCVisualManager :: SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7 ));在CMainFrame :: OnCreate中,但窗格不会更改,是否需要将它添加到窗格的OnCreate? – Jak 2014-10-08 09:42:46