首先需要注意的是,我最近才开始学习 WinAPI。我确信这个问题以前已经被问过很多次了,但由于某种原因我在网上找不到它。问题很简单;为什么要费心最初的电话ShowWindow()
在体内WinMain()
在消息循环执行之前?为什么不简单地通过使用将窗口设置为最初可见WS_VISIBLE
flag?
我也有一些关于机制的问题ShowWindow()
功能。它实际发送哪些消息? MSDN 中指出:
如果一个窗口有WS_VISIBLE
创建时的样式,窗口
收到此消息[WM_SHOWWINDOW]
创建之后但之前
它被显示。窗口在其
可见性状态被改变ShowWindow
or ShowOwnedPopups
功能。
这是否意味着双方之间的主要沟通方式ShowWindow()
功能和Windows是通过WM_SHOWWINDOW
信息?它还指出:
The WM_SHOWWINDOW
在以下情况下消息不会发送
情况:
MSDN 还指出:
应用程序第一次调用ShowWindow
,它应该使用WinMain
功能nCmdShow
参数作为其nCmdShow
范围。
佩措尔德指出,论点传递给了这个nCmdShow
参数将是SW_SHOWNORMAL
, SW_SHOWMAXIMIZED
or SW_SHOWMINNOACTIVE
。我是否可以从这件事中得出唯一的一次ShowWindow()
函数不发送WM_SHOWWINDOW
消息,是当我们第一次初始调用它时Winmain()
?如果是这样,它如何让窗口显示?另外,所有这些与窗户的实际绘画有何关系?
如果我的问题有点混乱,我很抱歉,但是显示窗口的机制让我感到困惑,并且由于某种原因,很难在网上找到这些问题的明确答案(而不是只是零散的信息) )。任何有助于澄清所有这些的帮助将不胜感激!
背后的想法nCmdShow
WinMain 的参数是它让 Windows 有机会让您的应用程序知道 Windows 希望它如何显示窗口。该机制可能不再有用,但可能存在边缘情况。无论如何,在创建它之后,您应该将其传递到您认为是主窗口的任何窗口。将其创建为隐藏可以让您创建任何子窗口而不会闪烁,所以这就是大多数人所做的。
我认为背后的逻辑WM_SHOWWINDOW
是和不是发送是为了让你用它来接听来电ShowWindow (hWnd, SW_HIDE)
and ShowWindow (hWnd, SW_SHOW)
在您的窗口过程中,因为您可能想在那时采取一些操作(例如停止播放音频)。也许还有SW_MINIMIZE
, SW_MAXIMIZE
and SW_RESTORE
,我想这一切都取决于。
这些帮助有用?
Edit
嗯,相当多的信息已经发布到这个线程,所以我想我会尽力总结它,因为我理解它。开始。
WinMain 的 nCmdShow 参数似乎是历史性的。相反,第一次调用 ShowWindow就好像您已将这个值传递给它一样,无论您是否喜欢,因此该调用最好是在您的主窗口中。尽管如此,你还是可以玩一下这个游戏,然后把它传下去,你永远不知道会发生什么。
阅读并理解 Hans Passant 对这篇文章的评论。这将告诉您该值在 Windows UI 中最常见的来源。
仅供参考,可以创建您的child设置了 WS_VISIBLE 的窗口。在显示主窗口之前您不会看到它们。
好了,我完成了。有时少即是多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)