如果我创建正常CButtons
,他们看起来像这样:
当我执行以下操作时,我意外地创建了一些较旧的按钮:
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;
}
现在我想用这种风格创建按钮。 (因为我想添加一个位图。只有在使用这种风格时,它们会给出“按下”的视觉反馈。新样式只是将背景蓝色调暗,而这是由按钮顶部的位图隐藏的。另一个问题是,如果按下按钮时还有一种简单的方法也可以对图像进行着色。)
告诉MFC创建这种按钮的正确方法是什么?只是向基类省略OnCreate
消息对我来说是错误的。而且我不确定这是否会导致其他副作用,我还不知道。
我找到了一些关于如何改变整个程序的视觉风格的信息。但我只想为一些选定的按钮更改它。
答案 0 :(得分:2)
可以基于每个窗口启用和禁用视觉样式。 MSDN提供有关如何Turn Off Visual Styles:
的信息您可以通过调用SetWindowTheme函数关闭窗口中控件或所有控件的视觉样式,如下所示:
sizeof
SetWindowTheme(hwnd, L" ", L" ");
派生类中实现此功能,请将代码放在CButton
- 处理程序中:
OnCreate
int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) {
::SetWindowTheme( m_hWnd, L" ", L" " );
return CButton::OnCreate( lpcs );
}
附加到现有标准按钮控件(及其控件)已创建,您的CClickButton
- 处理程序将不会被调用。对于此特定方案,您将不得不在以后关闭视觉样式。理想的候选者是覆盖虚拟OnCreate
方法:
PreSubclassWindow