本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:81]
发信人: novice (Android), 信区: VC
标 题: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月06日23:59:04 星期天), 站内信件 WWWPOST
BOOL WINAPI ShowWindow(
__in HWND hWnd,
__in int nCmdShow
);
中 nCmdShow,MSDN中有这么段话:
This parameter is ignored the first time an application calls ShowWindow, if
the program that launched the application provides a STARTUPINFO structure.
Otherwise, the first time ShowWindow is called, the value should be the
value obtained by the WinMain function in its nCmdShow parameter.
要怎么理解???
我的理解是,如果我用CreateProcess创建某程序,该程序就是创建个窗口,别无其他功
能,调用CreateProcess时提供了STARTUPINFO si,并将相应的标志位设置si.dwFlags =
STARTF_USESHOWWINDOW,si.wShowWindow = SW_SHOWMINIMIZED.
这样的话,即使被创建的程序第一次调用ShowWindow时传入参数 SW_SHOWMAXIMIZED ,程
序也应该刚开始是最小化的。因为按照文档说明,参数该被忽略。
但实际试验了一下,还是会出现最大化得窗口。不知道我哪里理解错误?
--
本 文:[转寄][转贴][删除][修改][回复][作者:CrLF][人气:7]
发信人: CrLF (CrLF(落羽猫)), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月07日13:26:12 星期一), 站内信件 WWWPOST
注意认真读文档:if the program that launched the application provides a
STARTUPINFO structure.
典型的提供STARTUPINFO的方法如:建立一个快捷方式,通过双击快捷方式启动。
--
本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:2]
发信人: novice (Android), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月07日21:04:18 星期一), 站内信件 WWWPOST
调用CreateProcess时,给 STARTUPINFO 赋值,不算提供STARTUPINFO 么?
--
本 文:[转寄][转贴][删除][修改][回复][作者:CrLF][人气:5]
发信人: CrLF (CrLF(落羽猫)), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月08日13:40:44 星期二), 站内信件 WWWPOST
之前理解错了。查了一下,使用STARTUPINFO 里提供的wShowWindow的条件是:
第一种情况:ShowWindow的参数设为SW_SHOWDEFAULT
第二种情况:满足以下条件,系统认定为主窗口:
1. 设置了 STARTF_USESHOWWINDOW.
2. 窗口是顶级窗口、无所有者、有WS_CAPTION、不是系统模态窗口
这种情况下若ShowWindow 的参数为 SW_SHOWNORMAL 或 SW_SHOW,则使用你给定的参数.
于是SW_MAXIMIZE不在此列…………
好吧,MSDN的文档不全……
--
※ 修改:・CrLF 于 2011年02月09日17:24 修改本文・[FROM: 60.18.151.188]
novice
69307364
本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:6]
发信人: novice (Android), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月08日16:27:05 星期二), 站内信件 WWWPOST
不好意思,没明白你的意思。我能理解,在你列举的两种情况下,如果给ShowWindow提
供SW_SHOWDEFAULT或者SW_SHOWNORMAL使得窗口按照STARTUPINFO的wShowWindow显示。
我不能明白的是,MSDN文档里说的,第一次调用ShowWindow忽略nCmdShow参数的情况。
对于“忽略”一词,我的理解是不管传入什么值,它都按照固定的方式显示。
调用CreateProcess时给STARTUPINFO赋值,不算提供STARTUPINFO么?
【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: 之前理解错了。查了一下,使用STARTUPINFO 里提供的wShowWindow的条件是:
:
: 第一种情况:ShowWindow的参数设为SW_SHOWDEFAULT
:
: 第二种情况:满足以下条件,系统认定为主窗口:
: 1. 设置了 STARTF_USESHOWWINDOW.
: 2. 窗口是顶级窗口、无所有者、有WS_CAPTION、不是系统模态窗口
: 3. ShowWindow 的参数为 SW_SHOWNORMAL 或 SW_SHOW.
:
: 于是SW_MAXIMIZE不在此列…………
:
: 好吧,MSDN的文档不全……
--
※ 修改:・novice 于 2011年02月08日16:28 修改本文・[FROM: 125.78.224.32]
CrLF
53453131364
本 文:[转寄][转贴][删除][修改][回复][作者:CrLF][人气:5]
发信人: CrLF (CrLF(落羽猫)), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月08日18:11:36 星期二), 站内信件 WWWPOST
不是,我查给你的规则是实际的规则(系统实际是这样做的)。msdn文档写的含糊 :)
信我查的好了。写msdn文档的人肯定没有写windows的人知道的清楚:P
【 在 novice (Android) 的大作中提到: 】
: BOOL WINAPI ShowWindow(
: __in HWND hWnd,
: __in int nCmdShow
: );
: 中 nCmdShow,MSDN中有这么段话:
: This parameter is ignored the first time an application calls ShowWindow, if
: the program that launched the application provides a STARTUPINFO structure.
: Otherwise, the first time ShowWindow is called, the value should be the
: value obtained by the WinMain function in its nCmdShow parameter.
:
: 要怎么理解???
:
: 我的理解是,如果我用CreateProcess创建某程序,该程序就是创建个窗口,别无其他功
: 能,调用CreateProcess时提供了STARTUPINFO si,并将相应的标志位设置si.dwFlags =
: STARTF_USESHOWWINDOW,si.wShowWindow = SW_SHOWMINIMIZED.
: 这样的话,即使被创建的程序第一次调用ShowWindow时传入参数 SW_SHOWMAXIMIZED ,程
: 序也应该刚开始是最小化的。因为按照文档说明,参数该被忽略。
:
: 但实际试验了一下,还是会出现最大化得窗口。不知道我哪里理解错误?
--
novice
69307364
本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:3]
发信人: novice (Android), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月08日20:18:32 星期二), 站内信件 WWWPOST
那意思是 ShowWindow第一次调用与后续调用没区别?
【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: 不是,我查给你的规则是实际的规则(系统实际是这样做的)。msdn文档写的含糊 :)
:
: 信我查的好了。写msdn文档的人肯定没有写windows的人知道的清楚:P
:
:
: 【 在 novice (Android) 的大作中提到: 】
: : BOOL WINAPI ShowWindow(
: : __in HWND hWnd,
: : __in int nCmdShow
: : );
: : 中 nCmdShow,MSDN中有这么段话:
: : This parameter is ignored the first time an application calls ShowWindow, if
: : the program that launched the application provides a STARTUPINFO structure.
: : Otherwise, the first time ShowWindow is called, the value should be the
: : value obtained by the WinMain function in its nCmdShow parameter.
: :
: : 要怎么理解???
: :
: : 我的理解是,如果我用CreateProcess创建某程序,该程序就是创建个窗口,别无其他功
: : 能,调用CreateProcess时提供了STARTUPINFO si,并将相应的标志位设置si.dwFlags =
: (以下引言省略...)
--
CrLF
53453131364
本 文:[转寄][转贴][删除][修改][回复][作者:CrLF][人气:3]
发信人: CrLF (CrLF(落羽猫)), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月09日17:28:30 星期三), 站内信件 WWWPOST
不不,你还是没明白我的意思。
首先是,不一定是*第一次*调用ShowWindow~ 而是第一次对符合主窗口条件(见上面)
的窗口调用ShowWindow 的时候。
这个时候如果你用SW_SHOW或SW_SHOWNORMAL,系统会替换。
你的程序系统认为它是主窗口了,但是你给的是最大化,系统就不管了~
【 在 novice (Android) 的大作中提到: 】
: 那意思是 ShowWindow第一次调用与后续调用没区别?
:
: 【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: : 不是,我查给你的规则是实际的规则(系统实际是这样做的)。msdn文档写的含糊 :)
: :
: : 信我查的好了。写msdn文档的人肯定没有写windows的人知道的清楚:P
: :
: :
: : (以下引言省略...)
--
novice
69307364
本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:5]
发信人: novice (Android), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月09日20:12:03 星期三), 站内信件 WWWPOST
抱歉在这个问题上纠缠这么久。
再说说我现在的理解。你的意思是:在满足主窗口条件时,第一次调用ShowWindow时使
用SW_SHOW或SW_SHOWNORMAL,会使窗口按照STARTUPINFO的信息显示?
MSDN里文档里说的“忽略”就是上述意思?“This parameter is ignored the first
time an application calls ShowWindow, if the program that launched the
application provides a STARTUPINFO structure.”感觉另有深意啊。
那为什么要称为“ignored”呢? 因为是上述说法的话,那等同于在SW_SHOW或SW_
SHOWNORMAL时,使用STARTUPINFO的信息。而其他参数也按照各自本来的效果显示,并没
有被忽略。
感觉你的意思是在说明在什么条件下使用STARTUPINFO的信息,而我最大的疑惑是MSDN文
档里的“忽略”二字。不对之处请指正。
【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: 不不,你还是没明白我的意思。
:
: 首先是,不一定是*第一次*调用ShowWindow~ 而是第一次对符合主窗口条件(见上面)
: 的窗口调用ShowWindow 的时候。
:
: 这个时候如果你用SW_SHOW或SW_SHOWNORMAL,系统会替换。
:
: 你的程序系统认为它是主窗口了,但是你给的是最大化,系统就不管了~
:
: 【 在 novice (Android) 的大作中提到: 】
: : 那意思是 ShowWindow第一次调用与后续调用没区别?
: :
--
※ 修改:・novice 于 2011年02月09日20:25 修改本文・[FROM: 222.77.201.102]
CrLF
53453131364
本 文:[转寄][转贴][删除][修改][回复][作者:CrLF][人气:2]
发信人: CrLF (CrLF(落羽猫)), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月09日23:00:37 星期三), 站内信件 WWWPOST
it is "ignored" becuase it is "overridden" :)
MSDN只是没说识别的细节而已。实际上你从设计意图上理解比较好。它之所以这么设计
,就是为了让写程序的人不用考虑到底该用什么参数。你只要主窗口的ShowWindow用
WinMain参数里给定的那个,根本不用考虑这些。如果需要在前面显示对话框,就该是模
态的。如果同时显示对话框,主窗口一般是所有者……总之,为了方便,你什么都不做
,交给Windows就好。
【 在 novice (Android) 的大作中提到: 】
: 抱歉在这个问题上纠缠这么久。
:
: 再说说我现在的理解。你的意思是:在满足主窗口条件时,第一次调用ShowWindow时使
: 用SW_SHOW或SW_SHOWNORMAL,会使窗口按照STARTUPINFO的信息显示?
:
: MSDN里文档里说的“忽略”就是上述意思?“This parameter is ignored the first
: time an application calls ShowWindow, if the program that launched the
: application provides a STARTUPINFO structure.”感觉另有深意啊。
:
: 那为什么要称为“ignored”呢? 因为是上述说法的话,那等同于在SW_SHOW或SW_
: SHOWNORMAL时,使用STARTUPINFO的信息。而其他参数也按照各自本来的效果显示,并没
: 有被忽略。
:
: 感觉你的意思是在说明在什么条件下使用STARTUPINFO的信息,而我最大的疑惑是MSDN文
: 档里的“忽略”二字。不对之处请指正。
:
: 【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: : 不不,你还是没明白我的意思。
: :
: : 首先是,不一定是*第一次*调用ShowWindow~ 而是第一次对符合主窗口条件(见上面)
: (以下引言省略...)
--
※ 修改:・CrLF 于 2011年02月09日23:08 修改本文・[FROM: 60.18.151.188]
novice
69307364
本 文:[转寄][转贴][删除][修改][回复][作者:novice][人气:0]
发信人: novice (Android), 信区: VC
标 题: Re: ShowWindow 的疑问
发信站: 瀚海星云 (2011年02月10日09:59:17 星期四), 站内信件 WWWPOST
it is "ignored" becuase it is "overridden" 。了解了。
哦哦,那结论是第一次调用时乖乖用WinMain的nCmdShow啦。
多谢!
【 在 CrLF (CrLF(落羽猫)) 的大作中提到: 】
: it is "ignored" becuase it is "overridden" :)
:
: MSDN只是没说识别的细节而已。实际上你从设计意图上理解比较好。它之所以这么设计
: ,就是为了让写程序的人不用考虑到底该用什么参数。你只要主窗口的ShowWindow用
: WinMain参数里给定的那个,根本不用考虑这些。如果需要在前面显示对话框,就该是模
: 态的。如果同时显示对话框,主窗口一般是所有者……总之,为了方便,你什么都不做
: ,交给Windows就好。
:
: 【 在 novice (Android) 的大作中提到: 】
: : 抱歉在这个问题上纠缠这么久。
: :
: : 再说说我现在的理解。你的意思是:在满足主窗口条件时,第一次调用ShowWindow时使
: : 用SW_SHOW或SW_SHOWNORMAL,会使窗口按照STARTUPINFO的信息显示?
: :
: : MSDN里文档里说的“忽略”就是上述意思?“This parameter is ignored the first
: : time an application calls ShowWindow, if the program that launched the
: : application provides a STARTUPINFO structure.”感觉另有深意啊。
: :
: : 那为什么要称为“ignored”呢? 因为是上述说法的话,那等同于在SW_SHOW或SW_
: : SHOWNORMAL时,使用STARTUPINFO的信息。而其他参数也按照各自本来的效果显示,并没
: (以下引言省略...)