2011-03-08 40 views
6

我需要一个MSVC++虚拟窗口,这将永远不可见,甚至在应用程序的主窗口之前创建。它是渲染引擎需要的。所以我宁愿不必注册一个班,如果可能的话。最简单的方法来创建一个HWND

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

+1

“需要一个渲染引擎”,这表明这个窗口是用来创建一个渲染上下文。是这样吗?在这种情况下,您应该最好创建一个与您的应用程序窗口相同的类的窗口。否则,你不能保证:a)你可以创建一个上下文,b)上下文将与你稍后使用的上下文兼容。无论如何,您必须为您的主窗口注册一个课程,所以它不会“额外花费”,真的。 – Damon 2011-03-08 10:30:56

+0

我没有创建自己的主窗口,所以我没有类可以重用......并且此窗口将被引擎用作虚拟渲染窗口......从未实际渲染过。 – 2011-03-08 11:23:26

+1

我第二次因为我经常遇到需要虚拟hWnd的情况。例如,我需要一个用于win32字体API的hwnd,以便将字体粘贴到二维存储器阵列中而不显示到窗口。 – 2012-04-20 02:41:32

回答

12

我提出我自己的测试代码进行批判:

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

它似乎工作...

+0

-1请不要把它放在答案中。它应该是对这个问题的编辑。 – 2011-03-08 11:31:51

+7

@DavidHeffernan:为什么不呢?它是对这个问题的回答,在回答你自己的问题时没有任何错误(原则上)。 – 2011-03-08 11:35:34

+0

@Charles @John对不起,我误解了。我认为,“批评”约翰意味着他仍在挣扎,并希望得到进一步的建议。我会取消。 – 2011-03-08 11:40:22

2

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

+5

或指定'WS_VISIBLE'标志。 – 2011-03-08 10:34:34

1

在第一篇教程NeHe中,他们仔细描述了设置OpenGL渲染上下文需要做些什么,并且窗口(和HWND)的创建是其中的一部分。如果你需要它,而不是OpenGL上下文,我相信它们提供的代码可以很容易地被采用。

+0

这是我想要的,但没有默认的“纯空窗口”类,我可以使用? – 2011-03-08 11:25:29

+0

我还没有在那里见过。但我认为删除不需要的代码比创建新代码更容易。这就是我发布的原因。 – CygnusX1 2011-03-08 14:14:53

+0

请不要引用NeHe – RecursiveExceptionException 2017-03-04 19:39:41

相关问题