0

在 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中做了):

在此处输入图像描述

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

4

4 回答 4

3
  Start = CreateWindowEx(WS_EX_TRANSPARENT, ...);

因为您使用了 WS_EX_TRANSPARENT 样式标志,所以您得到了黑色轮廓。不清楚你为什么使用它,当你使用 Button 控件时,你无能为力。否则,它可能是最不被理解的风格标志。改为传递 0 以获得正常外观的按钮。

否则,获得 .NET 按钮的确切外观是一个失败的原因,Winforms 不使用内置的 Button 控件。它创建自己的,使用自定义渲染器来获得渐变外观。复制本机代码需要大量工作。

于 2012-12-27T20:24:45.837 回答
0

编辑:我错误地将边框识别为默认按钮边框。正如大卫赫弗曼指出的那样,事实并非如此。也就是说,我现在已经重现了那个边框效果;程序启动时没有边框,但只需将鼠标悬停在左侧按钮上即可创建边框 - 至少在 Windows 7 中是这样。

原答案如下:


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

要更改字体,也许像 WM_SETFONT?

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

于 2012-12-27T19:59:59.953 回答
0

我认为您看到的边框是因为该按钮具有“默认按钮”属性。如果你把它关掉,那么它将有一个正常的边框。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);

如果没有,您必须使用ModifyStyleModifyStyleEx进行设置,并将其传递给“Remove”参数。我忘记了必须传入哪个特定样式,但如果我没记错的话,它是普通样式参数,而不是 EX 参数。

于 2012-12-27T20:01:19.997 回答
0

我没有对此进行测试,但尝试创建这样的按钮:

Start = CreateWindowEx(0, WC_BUTTON, "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_TEXT, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);
        break;

它还可能取决于您如何创建主窗口。您可以发布创建主窗口的代码吗?

于 2012-12-27T20:20:31.447 回答