while GetMessage(Msg,0,0,0) do 是死循环吗?(100)

  • 主题发起人 主题发起人 绝对新手
  • 开始时间 开始时间

绝对新手

Unregistered / Unconfirmed
GUEST, unregistred user!
我看到一个程序的源码中XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX while GetMessage(Msg,0,0,0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY那其中YYYYY的代码还会执行吗?在什么情况下执行呢?
 
直到while true才会跳出循环,下面的 YY语句与while语句只是前后关系,没有什么影响~~只有执行完了while语句,就会执行yy语句~~
 
典型的从消息队列中取消息的代码。
 
可是只有当收到WM_QUIT的消息的时候 GetMessage才会False 才会跳出循环 也就是说YYYYYYYYYY代码只有在程序即将结束的时候才会运行?
 
while GetMessage(Msg,0,0,0) do 是进入消息循环的语句,估计LZ看到的是只用.dpr来写程序的例子,这样做的好处是程序很小(可以只引用Windows单元),坏处是代码量大且不易控制。Windows就是一个基于消息的系统,所以个人认为你后面的YYYYYY不大有机会被执行到,你可以写在while的前面,还可以写在function WindowProc(hWnd, Msg, wParam, lParam: Longint): Longint; stdcall;函数里,根据消息进行判断处理,比如下面的例子:function WindowProc(hWnd, Msg, wParam, lParam: Longint): Longint; stdcall;var RCT: TRect; Host, User, Pass, Path, FName, Info: string;begin Result := DefWindowProc(hWnd, Msg, wParam, lParam); case Msg of 2: Halt; 5: GetWindowRect(Handle, RCT); 273: if lParam = hBtn then begin ... end; end;end;
 
差不多明白了 谢谢大家
 

Similar threads

I
回复
0
查看
751
import
I
I
回复
0
查看
613
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
579
import
I
后退
顶部