我在CFormView上有一个CMFCButton。我希望它具有特定的背景颜色。我遇到了CMFCButton :: SetFaceColor,我认为会这样做。但不幸的是它没有用。可能是我在这里误解了“面子”这个术语。是这样的吗?
这是我的代码:
m_btnCopy.SetFaceColor(RGB(255,0,0),true);
m_btnCopy.SetTextColor(RGB(0,0,255));
并输出:
答案 0 :(得分:4)
此设置非常陈旧,现代主题引擎会忽略它。 很可能您的应用程序是由Visual Studio向导生成的,包含以下内容:
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
您可以尝试删除此行以禁用自定义MFC主题,但无论如何,按钮看起来不会很好,在SetFaceColor
之后它将以经典主题绘制。
答案 1 :(得分:0)
几乎相同的方法,但外观略好一些。
m_btnCopy.EnableWindowsTheming(FALSE);
m_btnCopy.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
m_btnCopy.m_bTransparent = false;
m_btnCopy.SetFaceColor(RGB(255,0,0),true);
m_btnCopy.SetTextColor(RGB(0,0,255));
答案 2 :(得分:0)
其他人建议使用m_bDontUseWinXPTheme = TRUE。由于afxbutton.cpp中的以下代码,它可以工作:
void CMFCButton::DrawBorder(CDC* pDC, CRect& rectClient, UINT uiState)
{
<snip>
// Draw 3d border:
if (m_nFlatStyle != BUTTONSTYLE_NOBORDERS)
{
if (m_bWinXPTheme && !m_bDontUseWinXPTheme && CMFCVisualManager::GetInstance()->DrawPushButtonWinXP(pDC, rectClient, this, uiState))
设置了m_bDontUseWinXPTheme后,不再调用“ DrawPushButtonWinXP”。您会看到一个难看的旧样式按钮。