首先要警告一下,我直到最近才开始学习WinAPI。我敢肯定这个问题已经被问过很多次了,但是由于某种原因,我在网上找不到任何地方。问题很简单。在执行消息循环之前,为什么要在ShowWindow()
主体中对WinMain()
进行初始调用而烦恼呢?为什么不简单地通过使用WS_VISIBLE
标志将窗口设置为最初可见?
对于ShowWindow()
函数的机制,我也有一些疑问。它实际发送哪些消息?在MSDN中指出:
这是否意味着ShowWindow()
函数和Windows之间的主要通信方式是通过WM_SHOWWINDOW
消息?它还指出:
MSDN还指出:
Petzold指出,传递给此nCmdShow
参数的参数将为SW_SHOWNORMAL
,SW_SHOWMAXIMIZED
或SW_SHOWMINNOACTIVE
。我是否据此认为ShowWindow()
函数唯一不发送WM_SHOWWINDOW
消息的时间是在Winmain()
中首次对其进行首次调用时?如果是这样,那么如何显示窗口?此外,所有这些与窗口的实际绘画有何关系?
很抱歉,如果我的问题有点困惑,但是显示窗口的机制使我感到困惑,并且由于某种原因,很难在线上找到这些问题的明确答案(而不是零碎的信息) )。在澄清所有这些方面的任何帮助将不胜感激!
最佳答案
WinMain的nCmdShow
参数背后的想法是,它使Windows有机会让您的应用程序知道Windows希望它如何显示窗口。该机制可能不再有用,但是可能存在一些极端情况。无论如何,创建后应将其传递给您认为是主窗口的任何内容。隐藏创建它可以让您创建任何没有闪烁的子窗口,因此大多数人都这样做。
我认为发送和不发送WM_SHOWWINDOW
的背后逻辑是,让您使用它来捕获窗口proc中对ShowWindow (hWnd, SW_HIDE)
和ShowWindow (hWnd, SW_SHOW)
的调用,因为您可能当时想采取一些措施(例如停止播放)音频)。也许还有SW_MINIMIZE
,SW_MAXIMIZE
和SW_RESTORE
,我想这全都取决于。
这些帮助有用?
编辑
好吧,已经有很多信息发布到该线程中,所以我认为我将尽我所能对其进行总结。开始。
好了,我完成了。有时少即是多。
关于c - 为什么要初次调用ShowWindow()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50562616/