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

标签 c windows winapi createwindow createwindowex

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

standard window without icon in title bar

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

我正确地注册了我的类(class),但我不知道要为窗口样式/扩展窗口样式添加什么。

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

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

最佳答案

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

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

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

关于使用 CreateWindowEx 创建一个没有图标的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905465/

相关文章:

c - 如何将指针指向的大字符串放入缓冲区

c++ - 如何构建捕获所有异常的 C++ Dll 包装器?

c - 一个提供发送电子邮件功能的开源C库?

c - 运行具有重定向输入的 C 程序时如何知道是否 EOF?

linux - PySpark 速度 Ubuntu 与 Windows

c++ - 相同的 C++ 代码导致 Windows 上的无限循环和 OSX 上的预期行为

c++ - 如何在 C++ 中为对话框实现 Windows 样式?

windows - 是否有 OutputDebugString 的 Unicode 替代品?

c# - 如何获取服务器上打开的 HTTP 连接总数?

c++ - openssl RAND_add() 文档引用 RFC1750。 RFC1750 对此事保持沉默