MFC VC ++:CMFCButton :: SetFaceColor不会更改背景(面部)颜色

时间:2014-11-29 16:36:17

标签: c++ visual-c++ mfc

我在CFormView上有一个CMFCButton。我希望它具有特定的背景颜色。我遇到了CMFCButton :: SetFaceColor,我认为会这样做。但不幸的是它没有用。可能是我在这里误解了“面子”这个术语。是这样的吗?

这是我的代码:

m_btnCopy.SetFaceColor(RGB(255,0,0),true);
m_btnCopy.SetTextColor(RGB(0,0,255));

并输出:

enter image description here

3 个答案:

答案 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”。您会看到一个难看的旧样式按钮。