14

我一直很好奇 nCmdShow 在使用 Windows API 的 C 程序的 WinMain 中的含义。

我查找了正式的解释:“控制窗口的显示方式。此参数可以是以下值之一。”。

我不明白这是什么意思,因为一个 Windows 程序可以包含多个窗口,或者根本没有窗口。另外,随着程序的开始,开始时没有显示窗口,这让我更加质疑这个论点。

同样根据我的阅读,它始终保持为 10,甚至不在“ http://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85中的选项列表中%29.aspx "...

它已经过时了吗?有人可以解释它的目的,或提供任何解释其用途的参考资料吗?我尝试谷歌搜索,但什么也没看到。

谢谢!

重访

当您右键单击快捷方式并转到属性时,可以选择启动窗口 Minimized、Maximized 或 Normal(ly)。

如果程序以这三种方式中的任何一种启动,Windows 会为您的程序提供一个 nCmdShow,以防它想以一种特殊的方式进行操作。例如,如果请求将其最小化,它可能会将自己隐藏在通知栏中。


为了详尽:

在此处输入图像描述

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx描述了所有可能通过的不同方式。

4

4 回答 4

9

它基本上是对应用程序应该如何显示其主窗口的提示。虽然是legacy,但不如hPrevInstance参数legacy。但是,我离题了...

参数的值将是API 参考nCmdShow中指定的常量之一。ShowWindow它可以由另一个进程或系统通过启动您的应用程序来设置CreateProcessSTARTUPINFO可以选择传递给的结构CreateProcess包含将通过参数wShowWindow传递给的成员变量。WinMainnCmdShow

传递参数的另一种方式nCmdShow是通过调用ShellExecute.

在我的脑海中,我想不出任何场景(在最新版本的 Windows 中)操作系统会SW_SHOW在启动应用程序时显式传递值。

nCmdShow应用程序忽略传递给WinMain[?]的标志并不少见。

于 2013-03-06T06:09:19.260 回答
6

ShowWindow请注意文档中的此部分:

nCmdShowShowWindow:如果启动应用程序的程序提供了STARTUPINFO结构,则该参数在应用程序第一次调用时被忽略。

即使您的程序在启动时没有窗口,但在您最终第一次调用ShowWindow. (但是,它不是直接从WinMain的局部nCmdShow变量中读取的,因此您不能在其中更改它的值WinMain并期望得到不同的结果。从这个意义上说,它并不是特别有用,除非您的程序需要做一些特殊的事情,如果它开始最小化或最大化。)

于 2013-03-06T08:28:36.900 回答
2

nCmdShow 中的“n”表示“短整数”。

(这是我来到这个堆栈溢出页面时想知道的)

来源: https ://msdn.microsoft.com/en-us/library/windows/desktop/aa378932(v=vs.85).aspx

于 2017-07-20T17:54:43.500 回答
1

nCmdShow 是整数类型,此参数指定应用程序窗口应如何显示(对操作系统)如果您未指定任何值,则默认情况下 Windows 操作系统说此参数的 SW_NORMAL 值。您可以指定此参数的值,但传递给 WinMain() 的值仅适用于 Windows 操作系统

于 2016-12-04T05:56:10.137 回答