5

使用 C#,我很容易就能得到我想要的效果:

标题栏中没有图标的标准窗口

但是,我在使用 C 中的 Win32 API 做同样的事情时遇到了麻烦。我不知道如何创建一个没有图标(完全)但仍然有标题、最小化按钮和关闭的窗口按钮。

我正确注册了我的课程,但我不知道要为窗口样式/扩展窗口样式添加什么。

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);

上面的代码产生:

标题栏中带有图标的标准窗口

标题栏中仍然有一个图标,这不是我想要的。

4

2 回答 2

7

标准窗口需要一个图标,因为它需要在屏幕底部的任务栏中以某种形式表示。如果其中一个主窗口没有图标,则在窗口切换器中按Alt+时应该显示什么?Tab

您需要指定WS_EX_DLGMODALFRAME扩展样式。这与关闭标题栏中的图标时 WinForms 设置的效果相同。

需要确保在注册窗口类时没有指定图标。您需要将结构的hIconhIconSm字段设置WNDCLASSEX为 0。

将您的代码更改为以下内容:

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);
于 2011-02-05T06:30:19.650 回答
2

附带说明一下,使用 Spy++ 或其他类似工具查看任何给定 HWND 实际使用的样式。将它指向您的 C# 窗口,然后在您的 C 代码中复制报告的样式。

于 2011-02-05T08:32:06.477 回答