如果我创建正常的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消息对我来说是错误的。我不确定这是否会导致其他的副作用,我还没有意识到。
我发现了一些关于如何改变整个程序的视觉风格的信息。但我只想对一些选定的按钮进行更改。
发布于 2015-07-22 22:25:21
可视样式可以在每个窗口的基础上启用和禁用。MSDN提供了有关如何使用关闭视觉样式的信息。
通过调用SetWindowTheme函数,可以关闭控件的视觉样式或窗口中的所有控件,如下所示: SetWindowTheme(hwnd,L“",L”");
要在MFC CButton-derived类中实现这一点,请将代码放在OnCreate-handler中:
int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) {
::SetWindowTheme( m_hWnd, L" ", L" " );
return CButton::OnCreate( lpcs );
}
如果您使用对话框资源构建GUI并在创建对话框(及其控件)之后使用CClickButton函数将CClickButton附加到现有的标准按钮控件,则不会调用OnCreate-handler。对于这个特定的场景,您必须在以后关闭视觉样式。理想的候选方法是重写虚拟PreSubclassWindow方法:
void CClickButton::PreSubclassWindow() {
::SetWindowTheme( m_hWnd, L" ", L" " );
CButton::PreSubclassWindow();
}https://stackoverflow.com/questions/31569337
复制相似问题