gpt4 book ai didi

c - WM_CREATE 中的 ShowWindow

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:01 31 4
gpt4 key购买 nike

在我看来,窗口过程的 WM_CREATE 消息的一种用途是减轻调用者在窗口初始化时执行静态代码的负担。我的窗口是执行WM_CREATE消息中的一些代码,包括ShowWindow函数。我还希望 ShowWindow 根据 WinMain 中的 nCmdShow 参数正常运行。所以这里是伪代码来展示我是如何设置的:

int g_nCmdShow;

WinMain(..., int nCmdShow)
{
g_nCmdShow = nCmdShow;
...
CreateWindow(..., WM_OVERLAPPEDWINDOW, ...)
...
}

WndProc()
{
...
WM_CREATE:
...
ShowWindow(hWnd, g_nCmdShow);
...
...
}

所以我将程序设置为最小化运行(使用 Windows XP 我创建了一个 .exe 的快捷方式,并相应地设置了它的属性),它在任务栏上显示为最小化但当我单击时它不会恢复在上面。同样,如果我将其最大化运行,当我单击最大化按钮(取消最大化)时,它不会正确运行。

在 WM_CREATE 消息中使用 nCmdShow 兼容 ShowWindow 的正确方法是什么?

最佳答案

问题是窗口的恢复范围受此影响。它们在 WM_CREATE 返回后成为窗口的大小。您将不得不修改您的代码以重新建立这些恢复范围:

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 300, 200, NULL, NULL, hInstance, NULL);
WINDOWPLACEMENT wp;
GetWindowPlacement(hWnd, &wp); // <= Note wp.rcNormalPosition after this call!
RECT rc = {100, 100, 400, 300};
wp.rcNormalPosition = rc;
SetWindowPlacement(hWnd, &wp);

这样做并没有领先。

关于c - WM_CREATE 中的 ShowWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060380/

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