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

然而,我在使用C中的Win32 API做同样的事情时遇到了麻烦。我不知道如何创build一个没有任何图标的窗口,但仍然有一个标题,一个最小化button和一个closuresbutton。
我正确地注册了我的类,但我不知道要为窗口样式/扩展窗口样式放置什么。
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);
上面的代码产生了:

在标题栏中仍然有一个图标,并不是我想要的。
标准窗口需要一个图标,因为它需要在屏幕底部的任务栏中有某种形式的表示。 如果其中一个主窗口没有图标,在窗口切换器中按Alt + Tab时应该显示什么内容?
您需要指定WS_EX_DLGMODALFRAME扩展样式 。 这与WinForms在关闭标题栏中的图标时所设置的效果相同。
您还需要确保在注册窗口类时不指定图标 。 您需要将WNDCLASSEX结构的hIcon和hIconSm字段设置为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);
在附注上,使用Spy ++或其他类似的工具来查看任何给定的HWND实际使用的样式。 将它指向C#窗口,然后在C代码中复制报告的样式。