首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WINAPI按钮背景

WINAPI按钮背景
EN

Stack Overflow用户
提问于 2012-12-28 03:48:11
回答 4查看 2.1K关注 0票数 0

在WINAPI中,我创建了一个类似如下的按钮:

代码语言:javascript
复制
case WM_CREATE:
{
    Start = CreateWindowEx(WS_EX_TRANSPARENT, "Button", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);
            break;
}

该按钮如下所示:

但我需要它看起来像这样(我在.Net中做到了):

我怎样才能摆脱那个黑色的边框/背景?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-28 04:24:46

代码语言:javascript
复制
  Start = CreateWindowEx(WS_EX_TRANSPARENT, ...);

因为您使用了WS_EX_TRANSPARENT样式标志,所以得到了黑色的轮廓。现在还不清楚你为什么要使用它,当你使用Button控件的时候,你对它能做的并不多。否则很可能是least understood style flag。取而代之的是传递0,以获得外观正常的按钮。

要获得按钮的确切外观是不可能的,因为Winforms不使用内置的.NET控件。它创建自己的,使用自定义渲染器来获得渐变外观。重现原生代码是一项繁重的工作。

票数 3
EN

Stack Overflow用户

发布于 2012-12-28 04:00:00

编辑:我错误地将边框标识为默认按钮边框。正如David Hefferman所指出的,事实并非如此。也就是说,我现在有了reproduced that border effect;当程序启动时,没有边框,但只需在左边的按钮上一点鼠标就可以创建边框--至少在Windows7中是这样。

最初的答案如下:

黑色边框是因为它是默认的。你不应该干扰系统对默认按钮等的可视化。用户依赖这些提示。

来改变字体,比如,WM_SETFONT?

免责声明:我还没有尝试过。您可能需要处理WM_CTRLCOLOR或类似的东西。试一试,最后,如果默认按钮不能满足您的需求,只需实现您自己的按钮。

票数 0
EN

Stack Overflow用户

发布于 2012-12-28 04:01:20

我认为您看到的边框是因为按钮具有“默认按钮”属性。如果你关闭它,它将会有一个正常的边框。Default属性只告诉Win32,当用户在对话框/表单上点击ENTER时激活哪个按钮。如果您只有一个按钮,那么它将始终具有默认属性。如果您添加第二个,它将不会。

该属性是BS_DEFPUSHBUTTON属性,因此在CreateWindowEx调用中,您应该能够执行以下操作:

代码语言:javascript
复制
Start = CreateWindowEx(WS_EX_TRANSPARENT, "Button", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | ~BS_DEFPUSHBUTTON, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);

如果没有,你必须使用ModifyStyleEx,或ModifyStyle来设置它,并在“ModifyStyle”参数中传递它。我忘记了必须传入哪个特定的样式,但如果我没记错的话,它是普通的样式参数,而不是EX参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14060394

复制
相关文章

相似问题

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