繁体   English   中英

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

[英]MFC VC++: CMFCButton::SetFaceColor does not change background(face) color

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

这是我的代码:

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

和输出:

在此处输入图片说明

此设置非常过时,现代主题引擎将忽略它。 您的应用程序很可能是由Visual Studio向导生成的,并且包含以下内容:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

您可以尝试删除此行以禁用自定义MFC主题,但是无论如何该按钮看起来都不会很好,在SetFaceColor之后,它将以经典主题绘制。

几乎相同的方法,但外观略好。

  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));

其他人建议使用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”。 您会看到一个难看的旧样式按钮。

试试这些代码。

mCMFCBtn.m_bGrayDisabled = FALSE;

mCMFCBtn.m_bDontUseWinXPTheme = TRUE;

mCMFCBtn.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;

mCMFCBtn.SetFaceColor(RGB(255, 0, 0), TRUE);

mCMFCBtn.SetTextColor(RGB(0, 0, 0));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM