不使用WinMain函数创建Win32窗口

5

我希望能在Windows上为OpenGL编写一个小型窗口框架。 我知道有很多好的窗口库,但我喜欢自己动手。 但是我遇到了一个小问题,如果我要使用Win32 API创建一个窗口,我需要像"hInstance"之类的参数…… 如何在Window.class中获取这些必需的变量? 其他窗口库是如何处理的?


我可能没有理解问题的重点,但是有什么阻止你要求库的“客户端”通过提供所需的数据(例如模块的hInstance)来启动设置步骤? - WhozCraig
所有的WinMain参数都可以在没有WinMain的情况下使用 -- https://dev59.com/GW445IYBdhLWcg3w0ddD#25250854 - Ben Voigt
1个回答

6
您可以使用 GetModuleHandle(0); 方法获取程序的 hInstance。只需将 0 作为 hInstance 参数传递即可,这种方法对我来说是有效的。
“传递 0 会检索到调用的进程的句柄,而不是调用的模块的句柄。如果库/框架作为 DLL 实现,则会得到错误的句柄。因此,请使用传递给 DllMain()DllEntryPoint() 的句柄。” – Remy Lebeau

1
传递0会检索调用进程的句柄,而不是调用模块的句柄。如果库/框架作为DLL实现,则会得到错误的句柄。请改用传递给DllMain()DllEntryPoint()的句柄。 - Remy Lebeau
当你链接到的文档解释传递 0 时会发生什么的时候,说“对我有用”有点没意义:如果此参数为 NULL,则 GetModuleHandle 返回一个句柄,该句柄指向用于创建调用进程(.exe 文件)的文件。 - chris
@chris 我的意思是作为hInstance参数,而不是GetModuleHandle函数的参数。我已经编辑过来明确这一点。 - nwp
@OP 没提到他们的框架是在 dll 中。他们也没有标记dll或动态链接库。可以安全地假设他们只是用 main 替换 winmain,所以 GetModuleHandle(0) 对于这个目的是没问题的。 - Brandon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接