首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WM_CREATE中的ShowWindow

WM_CREATE中的ShowWindow
EN

Stack Overflow用户
提问于 2010-10-31 03:46:37
回答 3查看 842关注 0票数 0

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

代码语言:javascript
复制
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的正确方式是什么?

EN

回答 3

Stack Overflow用户

发布于 2010-10-31 04:17:15

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

代码语言:javascript
复制
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);

你这样做是不会领先的。

票数 2
EN

Stack Overflow用户

发布于 2010-10-31 09:07:13

如果您一定要将其保存在WndProc中,请尝试

代码语言:javascript
复制
case WM_CREATE:
    PostMessage(hwnd,WM_APP,0,0);
    break;
case WM_APP:
    ShowWindow(hwnd,SW_SHOW);
    break;

但是如果这很重要,为什么不使用一个辅助函数来创建窗口并调用ShowWindow呢?MyWindowType_Create(...)等

票数 1
EN

Stack Overflow用户

发布于 2010-10-31 04:35:18

您可以处理WM_WINDOWPOSCHANGED并在第一次恢复窗口时覆盖窗口大小吗?使用GetWindowPlacement找出窗口是否已恢复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4060380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档