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