[英]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.