禁用单个 CButton 的视觉样式
Disable visual style for a single CButton
如果我创建正常 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;
}
现在我想创建这种样式的按钮。 (因为我想添加一个位图。只有在使用这种样式时,他们才会给出获得 'pushed down' 的视觉反馈。新样式只是将背景染成蓝色,这被按钮顶部的位图隐藏了。另一个问题是,是否有一种简单的方法可以在按下按钮时也为图像着色。)
告诉 MFC 创建这些按钮的正确方法是什么?只是省略 OnCreate
消息到基础 class 对我来说感觉不对。而且我不确定这是否会导致我还不知道的其他副作用。
我找到了一些关于如何改变整个程序的视觉风格的信息。但我只想为某些选定的按钮更改它。
可以在每个 window 的基础上启用和禁用视觉样式。 MSDN 提供了有关如何 Turn Off Visual Styles:
的信息
You can turn off visual styles for a control or for all controls in a window by calling the SetWindowTheme function as follows:
SetWindowTheme(hwnd, L" ", L" ");
要在您的 MFC CButton
-derived class 中实现此功能,请将代码放入您的 OnCreate
-处理程序中:
int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) {
::SetWindowTheme( m_hWnd, L" ", L" " );
return CButton::OnCreate( lpcs );
}
如果您使用对话框资源构建 GUI 并在对话框(及其控件)之后使用 DDX_Control 函数将 CClickButton
附加到现有的标准按钮控件) 已经创建,您的 OnCreate
-handler 将不会被调用。对于这种特定情况,您必须稍后关闭视觉样式。一个理想的候选者是覆盖虚拟 PreSubclassWindow
方法:
void CClickButton::PreSubclassWindow() {
::SetWindowTheme( m_hWnd, L" ", L" " );
CButton::PreSubclassWindow();
}
如果我创建正常 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;
}
现在我想创建这种样式的按钮。 (因为我想添加一个位图。只有在使用这种样式时,他们才会给出获得 'pushed down' 的视觉反馈。新样式只是将背景染成蓝色,这被按钮顶部的位图隐藏了。另一个问题是,是否有一种简单的方法可以在按下按钮时也为图像着色。)
告诉 MFC 创建这些按钮的正确方法是什么?只是省略 OnCreate
消息到基础 class 对我来说感觉不对。而且我不确定这是否会导致我还不知道的其他副作用。
我找到了一些关于如何改变整个程序的视觉风格的信息。但我只想为某些选定的按钮更改它。
可以在每个 window 的基础上启用和禁用视觉样式。 MSDN 提供了有关如何 Turn Off Visual Styles:
的信息You can turn off visual styles for a control or for all controls in a window by calling the SetWindowTheme function as follows:
SetWindowTheme(hwnd, L" ", L" ");
要在您的 MFC
CButton
-derived class 中实现此功能,请将代码放入您的 OnCreate
-处理程序中:
int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) {
::SetWindowTheme( m_hWnd, L" ", L" " );
return CButton::OnCreate( lpcs );
}
如果您使用对话框资源构建 GUI 并在对话框(及其控件)之后使用 DDX_Control 函数将
CClickButton
附加到现有的标准按钮控件) 已经创建,您的 OnCreate
-handler 将不会被调用。对于这种特定情况,您必须稍后关闭视觉样式。一个理想的候选者是覆盖虚拟 PreSubclassWindow
方法:
void CClickButton::PreSubclassWindow() {
::SetWindowTheme( m_hWnd, L" ", L" " );
CButton::PreSubclassWindow();
}