请教,知道一个窗体的HANDLE如何获得其STYLE(50分)

  • 主题发起人 白河愁
  • 开始时间
你可以好好查查MSDN中的两个函数<br>1、CreateWindow<br>2、ShowWindow<br>重点看看CreateWindow的第三个参数
 
再to yyii_yyii:<br>CreateWindow应该可以解决问题,<br>但是 这个窗体并不是由我的程序创建的,<br>所以我的题目也只是写 “知道一个窗体的HANDLE"
 
呵呵,看来我是理解错了<br>可以用GetWindowPlacement;<br>程序如下:<br>WINDOWPLACEMENT wndpl<br>GetWindowPlacement(hwnd, &amp;wndpl);<br>wndpl.showCmd域值就是你想要的。<br>不好意思。<br>
 
to 白河愁:<br>//为何SW_HIDE和SW_NROAML的结果均为1?<br>知道这个结果我也很难过,可是我也不知道为什么<br><br>&nbsp;<br>
 
也许是我题目表达有问题,如果改成 STATE 应该就好了。
 
再附一分系统预定的值<br>/*<br>&nbsp;* ShowWindow() Commands<br>&nbsp;*/<br>#define SW_HIDE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0<br>#define SW_SHOWNORMAL &nbsp; &nbsp; &nbsp; 1<br>#define SW_NORMAL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1<br>#define SW_SHOWMINIMIZED &nbsp; &nbsp;2<br>#define SW_SHOWMAXIMIZED &nbsp; &nbsp;3<br>#define SW_MAXIMIZE &nbsp; &nbsp; &nbsp; &nbsp; 3<br>#define SW_SHOWNOACTIVATE &nbsp; 4<br>#define SW_SHOW &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br>#define SW_MINIMIZE &nbsp; &nbsp; &nbsp; &nbsp; 6<br>#define SW_SHOWMINNOACTIVE &nbsp;7<br>#define SW_SHOWNA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8<br>#define SW_RESTORE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9<br>#define SW_SHOWDEFAULT &nbsp; &nbsp; &nbsp;10<br>#define SW_FORCEMINIMIZE &nbsp; &nbsp;11<br>#define SW_MAX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;11
 
这个不用说,windows.pas里就有。<br><br>&nbsp; {$EXTERNALSYM SW_HIDE}<br>&nbsp; SW_HIDE = 0;<br>&nbsp; {$EXTERNALSYM SW_SHOWNORMAL}<br>&nbsp; SW_SHOWNORMAL = 1;<br>&nbsp; {$EXTERNALSYM SW_NORMAL}<br>&nbsp; SW_NORMAL = 1;<br>&nbsp; {$EXTERNALSYM SW_SHOWMINIMIZED}<br>&nbsp; SW_SHOWMINIMIZED = 2;<br>&nbsp; {$EXTERNALSYM SW_SHOWMAXIMIZED}<br>&nbsp; SW_SHOWMAXIMIZED = 3;<br>&nbsp; {$EXTERNALSYM SW_MAXIMIZE}<br>&nbsp; SW_MAXIMIZE = 3;<br>&nbsp; {$EXTERNALSYM SW_SHOWNOACTIVATE}<br>&nbsp; SW_SHOWNOACTIVATE = 4;<br>&nbsp; {$EXTERNALSYM SW_SHOW}<br>&nbsp; SW_SHOW = 5;<br>&nbsp; {$EXTERNALSYM SW_MINIMIZE}<br>&nbsp; SW_MINIMIZE = 6;<br>&nbsp; {$EXTERNALSYM SW_SHOWMINNOACTIVE}<br>&nbsp; SW_SHOWMINNOACTIVE = 7;<br>&nbsp; {$EXTERNALSYM SW_SHOWNA}<br>&nbsp; SW_SHOWNA = 8;<br>&nbsp; {$EXTERNALSYM SW_RESTORE}<br>&nbsp; SW_RESTORE = 9;<br>&nbsp; {$EXTERNALSYM SW_SHOWDEFAULT}<br>&nbsp; SW_SHOWDEFAULT = 10;<br>&nbsp; {$EXTERNALSYM SW_MAX}<br>&nbsp; SW_MAX = 10;<br>
 
为什么你们两个人的SW_MAX不一样?
 
我也觉得奇怪,我的是D5里的WINDOWS.PAS
 
附带一句,使用sdk编程用C比较好:)
 
因为Delphi要随Windows的更新来更新它的接口文件,所以使用vc可能<br>会比较好。
 
现在奇怪的是,即使用GetWindowPlacement,<br>SW_HIDE返回的值也是1........<br>
 
可能与开发工具有关,我用vc7结果正常
 
//可能与开发工具有关,我用vc7结果正常<br>可能是这样,有空试试别的工具<br>如果你只是要判断一个窗口是否可见的话,就用GetWindowLong<br>procedure TForm1.Button3Click(Sender: TObject);<br>begin<br>&nbsp; if (GetWindowLong(Handle, GWL_STYLE) and WS_VISIBLE) = WS_VISIBLE then<br>&nbsp; begin<br>&nbsp; &nbsp; ShowMessage('visible');<br>&nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; ShowMessage('not visible');<br>end;<br>
 
谢谢各位了。
 
我用VC6测试的结果与Delphi6一样,SW_HIDE的结果就是1<br>另外,MSDN中的说明:<br>The flags member of WINDOWPLACEMENT retrieved by this function is always zero. <br>If the window identified by the hWnd parameter is maximized, <br>the showCmd member is SW_SHOWMAXIMIZED. <br>If the window is minimized, showCmd is SW_SHOWMINIMIZED. <br>Otherwise, it is SW_SHOWNORMAL.<br>是不是就是说,如果Handle不是最大化以及最小化的时候,showCmd只会是SW_SHOWNORMAL(1)?<br>大概就是这样,反正我用下面的程序测试,显示的结果只有1、2、3:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; wp: TWindowPlacement;<br>&nbsp; i: Integer;<br>begin<br>&nbsp; for i:= 0 to 11 do<br>&nbsp; begin<br>&nbsp; &nbsp; ShowWindow(Handle, i);<br>&nbsp; &nbsp; FillChar(wp, SizeOf(wp), 0);<br>&nbsp; &nbsp; wp.length := SizeOf(wp);<br>&nbsp; &nbsp; if GetWindowPlacement(Handle, @wp) then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; ShowMessage(IntToStr(wp.showCmd));<br>&nbsp; &nbsp; end<br>&nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; ShowMessage(SysErrorMessage(GetLastError));<br>&nbsp; end;<br>end;<br><br>
 
顶部