在WINAPI中,我创建了一个类似如下的按钮:
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中做到了):

我怎样才能摆脱那个黑色的边框/背景?
发布于 2012-12-28 04:24:46
Start = CreateWindowEx(WS_EX_TRANSPARENT, ...);因为您使用了WS_EX_TRANSPARENT样式标志,所以得到了黑色的轮廓。现在还不清楚你为什么要使用它,当你使用Button控件的时候,你对它能做的并不多。否则很可能是least understood style flag。取而代之的是传递0,以获得外观正常的按钮。
要获得按钮的确切外观是不可能的,因为Winforms不使用内置的.NET控件。它创建自己的,使用自定义渲染器来获得渐变外观。重现原生代码是一项繁重的工作。
发布于 2012-12-28 04:00:00
编辑:我错误地将边框标识为默认按钮边框。正如David Hefferman所指出的,事实并非如此。也就是说,我现在有了reproduced that border effect;当程序启动时,没有边框,但只需在左边的按钮上一点鼠标就可以创建边框--至少在Windows7中是这样。
最初的答案如下:
黑色边框是因为它是默认的。你不应该干扰系统对默认按钮等的可视化。用户依赖这些提示。
来改变字体,比如,WM_SETFONT?
免责声明:我还没有尝试过。您可能需要处理WM_CTRLCOLOR或类似的东西。试一试,最后,如果默认按钮不能满足您的需求,只需实现您自己的按钮。
发布于 2012-12-28 04:01:20
我认为您看到的边框是因为按钮具有“默认按钮”属性。如果你关闭它,它将会有一个正常的边框。Default属性只告诉Win32,当用户在对话框/表单上点击ENTER时激活哪个按钮。如果您只有一个按钮,那么它将始终具有默认属性。如果您添加第二个,它将不会。
该属性是BS_DEFPUSHBUTTON属性,因此在CreateWindowEx调用中,您应该能够执行以下操作:
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参数。
https://stackoverflow.com/questions/14060394
复制相似问题