使用CreateWindowEx创建一个没有图标的窗口

时间:2011-02-05 06:19:28

标签: c windows winapi createwindow createwindowex

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

standard window without icon in title bar

但是,我在使用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);

上面的代码产生了:

standard window WITH an icon in the title bar

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

2 个答案:

答案 0 :(得分:7)

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

您需要指定WS_EX_DLGMODALFRAME extended style。这与WinForms在关闭标题栏中的图标时设置的效果相同。

当您注册窗口类时, 还需要确保不指定图标。您需要将hIcon结构的hIconSmWNDCLASSEX字段设置为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);

答案 1 :(得分:1)

在旁注中,使用Spy ++或其他类似工具来查看任何给定HWND实际使用的样式。将其指向C#窗口,然后在C代码中复制报告的样式。