gpt4 book ai didi

c++ - 在 WinMain 外部使用 CreateWindowEX 函数时,如何获取它的 HINSTANCE?

转载 作者:行者123 更新时间:2023-11-30 01:17:02 24 4
gpt4 key购买 nike

我试图在单击主窗口上的按钮时创建一个弹出窗口,为此我正在使用 CreateWindowEX 函数。但是,CreateWindowEx 函数接收 HINSTANCE 类型变量作为其倒数第二个参数。鉴于我在单击按钮时从 WndProcedure 内部创建这个新窗口,WinMain 函数中的 HINSTANCE 变量将对我不可用,因为它不是全局变量。

从WndProcedure回调函数中得到以下代码:

            case IDC_BUTTON PRESSED:
{

const char g_szClassName2[] = "POPWIND";
const char WndName2[] = "POPUP WINDOW";

HWND invisWindowHandle = CreateWindowEx(0,
g_szClassName2,
WndName2,
WS_OVERLAPPEDWINDOW,
200,
200,
800,
500,
NULL,
NULL,
hInstance,//THIS IS THE VARIABLE I AM HAVING TROUBLE GETTING
NULL);

ShowWindow(invisWindowHandle, 3);// SW_SHOWNORMAL);
UpdateWindow(invisWindowHandle);
}

我将如何获取我需要的 hInstance 变量,以便 CreateWindowEx 函数在 WndProcedure 回调函数内部工作?

注意:我考虑过将 hInstance 变量设置为全局变量,但我不确定我的应用程序创建的每个窗口是否都必须使用相同的 hInstance。

最佳答案

winapi 带有一些它从 Windows 版本 1 到 3 继承的包袱。它们使用协作式多任务处理,运行相同的“任务”是通过使用相同的程序并传递不同的 hInstance 值来实现的。将多任务 GUI 操作系统塞入 640 KB RAM 的重要技巧。

随着 21 年前 Windows NT 的发布,Windows 95 紧随其后,这不再重要。首先支持进程概念的 Windows 版本。安全和系统稳定性的一个重要概念,正在运行的程序之间存在非常强的隔离。因此,HINSTANCE 的相关性消失了,每个进程都获得相同的值。一个伪句柄。与 HMODULE 大致相同,它只是内存中加载模块的地址。

因此,为 hInstance 参数传递 NULL 是可以的。它的意思是“当前进程”,你不能为另一个进程创建一个窗口。将您从 WinMain() 获得的 hInstance 存储在全局变量中也很好,只有一个。

关于c++ - 在 WinMain 外部使用 CreateWindowEX 函数时,如何获取它的 HINSTANCE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com