首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用单个CButton的视觉样式

禁用单个CButton的视觉样式
EN

Stack Overflow用户
提问于 2015-07-22 16:50:55
回答 1查看 1.2K关注 0票数 2

如果我创建正常的CButtons,它们看起来如下所示:

在执行以下操作时,我意外地创建了一些看起来更老的按钮:

代码语言:javascript
复制
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消息对我来说是错误的。我不确定这是否会导致其他的副作用,我还没有意识到。

我发现了一些关于如何改变整个程序的视觉风格的信息。但我只想对一些选定的按钮进行更改。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 22:25:21

可视样式可以在每个窗口的基础上启用和禁用。MSDN提供了有关如何使用关闭视觉样式的信息。

通过调用SetWindowTheme函数,可以关闭控件的视觉样式或窗口中的所有控件,如下所示: SetWindowTheme(hwnd,L“",L”");

要在MFC CButton-derived类中实现这一点,请将代码放在OnCreate-handler中:

代码语言:javascript
复制
int CClickButton::OnCreate( LPCREATESTRUCT lpcs ) {
    ::SetWindowTheme( m_hWnd, L" ", L" " );
    return CButton::OnCreate( lpcs );
}

如果您使用对话框资源构建GUI并在创建对话框(及其控件)之后使用CClickButton函数将CClickButton附加到现有的标准按钮控件,则不会调用OnCreate-handler。对于这个特定的场景,您必须在以后关闭视觉样式。理想的候选方法是重写虚拟PreSubclassWindow方法:

代码语言:javascript
复制
void CClickButton::PreSubclassWindow() {
    ::SetWindowTheme( m_hWnd, L" ", L" " );
    CButton::PreSubclassWindow();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31569337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档