禁用单个CButton

时间:2015-07-22 16:50:55

标签: mfc

如果我创建正常CButtons,他们看起来像这样:

Button with visual styles enabled

当我执行以下操作时,我意外地创建了一些较旧的按钮:

class CClickButton : public CButton
{
    afx_msg int OnCreate (LPCREATESTRUCT lpcs);
    DECLARE_DYNAMIC(CClickButton);
    DECLARE_MESSAGE_MAP();
};

IMPLEMENT_DYNAMIC(CClickButton, CButton);

BEGIN_MESSAGE_MAP(CClickButton, CButton)
    ON_WM_CREATE()
END_MESSAGE_MAP()

int CClickButton::OnCreate (LPCREATESTRUCT lpcs)
{
    return 0;
}

Button with an older look

现在我想用这种风格创建按钮。 (因为我想添加一个位图。只有在使用这种风格时,它们会给出“按下”的视觉反馈。新样式只是将背景蓝色调暗,而这是由按钮顶部的位图隐藏的。另一个问题是,如果按下按钮时还有一种简单的方法也可以对图像进行着色。)

告诉MFC创建这种按钮的正确方法是什么?只是向基类省略OnCreate消息对我来说是错误的。而且我不确定这是否会导致其他副作用,我还不知道。

我找到了一些关于如何改变整个程序的视觉风格的信息。但我只想为一些选定的按钮更改它。

1 个答案:

答案 0 :(得分:2)

可以基于每个窗口启用和禁用视觉样式。 MSDN提供有关如何Turn Off Visual Styles

的信息
  

您可以通过调用SetWindowTheme函数关闭窗口中控件或所有控件的视觉样式,如下所示:

sizeof


要在MFC SetWindowTheme(hwnd, L" ", L" "); 派生类中实现此功能,请将代码放在CButton - 处理程序中:

OnCreate


如果您正在使用对话框资源来构建GUI,并在对话框后使用DDX_Control函数将int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) { ::SetWindowTheme( m_hWnd, L" ", L" " ); return CButton::OnCreate( lpcs ); } 附加到现有标准按钮控件(及其控件)已创建,您的CClickButton - 处理程序将不会被调用。对于此特定方案,您将不得不在以后关闭视觉样式。理想的候选者是覆盖虚拟OnCreate方法:

PreSubclassWindow