【问题标题】:MFC VC++: CMFCButton::SetFaceColor does not change background(face) colorMFC VC++:CMFCButton::SetFaceColor 不改变背景(脸)颜色
【发布时间】:2014-11-29 16:36:16
【问题描述】:

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

这是我的代码:

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

和输出:

【问题讨论】:

  • 你是不是被...绊倒了..."请注意,当 CMFCButton::m_bTransparent 成员变量为 TRUE 时,背景不会被填充。"
  • @rrrower 我检查了那个成员,默认情况下它是假的。

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


【解决方案1】:

这个设置相当陈旧,被现代主题引擎忽略了。 您的应用程序很可能是由 Visual Studio 向导生成的,并且包含以下内容:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

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

【讨论】:

  • 它起作用了,正如你所说,按钮看起来不太好。我将尝试覆盖 OnDraw 方法。谢谢
【解决方案2】:

几乎相同的方法,但看起来稍微好一点。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试这些代码。

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

      【讨论】:

        猜你喜欢
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多