创建 HWND 的最简单方法

Posted

技术标签:

【中文标题】创建 HWND 的最简单方法【英文标题】:Simplest way to create a HWND 【发布时间】:2011-03-08 10:26:25 【问题描述】:

我需要一个 MSVC++ 中的虚拟窗口,它永远不可见,甚至在应用程序的主窗口之前创建。渲染引擎需要它。因此,如果可能的话,我宁愿不必注册课程。

为了测试,最好让它可见以证明它在那里 - 我可以使用静态或按钮或其他东西吗?我一直在尝试使用 CreateWindow(),但是当我得到一个返回值时,没有任何可见的东西出现。

【问题讨论】:

"required by a rendering engine"表示这个窗口是用来创建一个渲染上下文的。是这样吗?在这种情况下,您最好创建一个与您的应用程序窗口具有相同类的窗口。否则,您无法保证 a) 您完全可以创建上下文,并且 b) 该上下文将与您以后使用的上下文兼容。无论如何,您都必须为您的主窗口注册一个课程,所以它不会“额外收费”,真的。 我没有创建自己的主窗口,所以我没有类可重用...并且该窗口将被引擎用作虚拟渲染窗口...从未实际渲染到。 我支持这个,因为我经常遇到需要虚拟 hWnd 的情况。例如,我需要一个用于某些 win32 字体 API 的 hwnd,以便在不将其显示到窗口的情况下将字体 blit 到 2d 内存数组中。 【参考方案1】:

我提交自己的测试代码以供批评:

HWND dummyHWND = ::CreateWindowA("STATIC","dummy",WS_VISIBLE,0,0,100,100,NULL,NULL,NULL,NULL);
::SetWindowTextA(dummyHWND,"Dummy Window!");

它似乎工作......

【讨论】:

@DavidHeffernan:为什么不呢?它问题的答案,在***上回答你自己的问题没有错(原则上)。 这是我对我的问题的回答 - 在提出问题后,我尝试了它并且它有效。通过批评,我的意思是它对改进或其他任何东西都是开放的。 CreateWindow 的返回类型为 void。 CreateWindowEx 返回一个 HWND【参考方案2】:

在 CreateWindow 之后需要调用 ShowWindow 使其可见。

【讨论】:

或者指定WS_VISIBLE标志。【参考方案3】:

在NeHe 的第一个教程中,他们仔细描述了设置 OpenGL 渲染上下文所需的操作,并且创建窗口(和 HWND)是其中的一部分。如果您需要它用于 OpenGL 上下文之外的其他内容,我相信它们提供的代码可以很容易地被采用。

【讨论】:

这正是我想要的,但没有我可以使用的默认“普通空窗口”类吗? 我没看到那里。但我认为删除不需要的代码比创建新代码更容易。这就是我发布的原因。 请不要引用NeHe @itzJanuary 为什么不呢?另请注意,这是一个 7 年前的问题/答案。

以上是关于创建 HWND 的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

为问题进程创建转储文件的最简单方法

创建可读 JSON 字符串的最简单方法是啥?

在 JavaScript 中从 1..20 创建整数数组的最简单方法

从JSON格式的字符串创建python列表的最简单方法是啥[重复]

使用 python/pandas 在 excel 上创建颜色渐变的最简单方法?

为现有 C/C++ 库创建原型级 Python 绑定的最简单、最高效的方法是啥?