首先要警告一下,我直到最近才开始学习WinAPI。我敢肯定这个问题已经被问过很多次了,但是由于某种原因,我在网上找不到任何地方。问题很简单。在执行消息循环之前,为什么要在ShowWindow()主体中对WinMain()进行初始调用而烦恼呢?为什么不简单地通过使用WS_VISIBLE标志将窗口设置为最初可见?

对于ShowWindow()函数的机制,我也有一些疑问。它实际发送哪些消息?在MSDN中指出:



这是否意味着ShowWindow()函数和Windows之间的主要通信方式是通过WM_SHOWWINDOW消息?它还指出:



MSDN还指出:



Petzold指出,传递给此nCmdShow参数的参数将为SW_SHOWNORMALSW_SHOWMAXIMIZEDSW_SHOWMINNOACTIVE。我是否据此认为ShowWindow()函数唯一不发送WM_SHOWWINDOW消息的时间是在Winmain()中首次对其进行首次调用时?如果是这样,那么如何显示窗口?此外,所有这些与窗口的实际绘画有何关系?

很抱歉,如果我的问题有点困惑,但是显示窗口的机制使我感到困惑,并且由于某种原因,很难在线上找到这些问题的明确答案(而不是零碎的信息) )。在澄清所有这些方面的任何帮助将不胜感激!

最佳答案

WinMain的nCmdShow参数背后的想法是,它使Windows有机会让您的应用程序知道Windows希望它如何显示窗口。该机制可能不再有用,但是可能存在一些极端情况。无论如何,创建后应将其传递给您认为是主窗口的任何内容。隐藏创建它可以让您创建任何没有闪烁的子窗口,因此大多数人都这样做。

我认为发送和不发送WM_SHOWWINDOW的背后逻辑是,让您使用它来捕获窗口proc中对ShowWindow (hWnd, SW_HIDE)ShowWindow (hWnd, SW_SHOW)的调用,因为您可能当时想采取一些措施(例如停止播放)音频)。也许还有SW_MINIMIZESW_MAXIMIZESW_RESTORE,我想这全都取决于。

这些帮助有用?

编辑

好吧,已经有很多信息发布到该线程中,所以我认为我将尽我所能对其进行总结。开始。

  • WinMain的nCmdShow参数似乎是历史的。相反,无论您是否喜欢,对ShowWindow的第一次调用都好像您已将其传递给此值一样,因此,该调用最好是在主窗口中进行。话虽如此,您还是可以玩游戏,然后继续进行下去,这是您永远不会知道的。
  • 阅读并理解Hans Passant对这篇文章的评论。这将告诉您该值在Windows UI中最通常来自何处。
  • 仅供引用,可以使用WS_VISIBLE设置创建您的子窗口。在显示主窗口之前,您不会看到它们。

  • 好了,我完成了。有时少即是多。

    关于c - 为什么要初次调用ShowWindow()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50562616/

    10-15 14:22