小弟正在学习李维的Inside VCL,在26页例子的消息处理函数代码如下,我还有三个疑问写在代码后面,请高手指点。function WindowProc(Window: HWnd; AMessage: UINT; WParam : WPARAM;
LParam: LPARAM): LRESULT; stdcall; export; var
dc : hdc;
ps : TPaintStruct;
r : TRect;begin
WindowProc := 0; case AMessage of
WM_PAINT :
begin
dc := BeginPaint(Window,ps);
GetClientRect(Window,r);
DrawText(dc,'使用TMyWindow类封装的Windows程序。这导致了使用面向对象方式设计窗口应用程序',-1,r,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Window,ps); //如果将上面5行全注释掉,窗口还是显示,只是少了“使用TMyWindow类封装的……”这几个字,为什么呢?不是要在这个里面绘图吗?
Exit;
end;
wm_Destroy:
begin
PostQuitMessage(0); //如果将这一行注释掉,窗口可以关闭,但任务管理器中进程还在,delphi工具也回不来,为什么?
Exit;
end;
end; WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);//如果将这一行注释掉,编译通不过,为什么?
end;
LParam: LPARAM): LRESULT; stdcall; export; var
dc : hdc;
ps : TPaintStruct;
r : TRect;begin
WindowProc := 0; case AMessage of
WM_PAINT :
begin
dc := BeginPaint(Window,ps);
GetClientRect(Window,r);
DrawText(dc,'使用TMyWindow类封装的Windows程序。这导致了使用面向对象方式设计窗口应用程序',-1,r,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Window,ps); //如果将上面5行全注释掉,窗口还是显示,只是少了“使用TMyWindow类封装的……”这几个字,为什么呢?不是要在这个里面绘图吗?
Exit;
end;
wm_Destroy:
begin
PostQuitMessage(0); //如果将这一行注释掉,窗口可以关闭,但任务管理器中进程还在,delphi工具也回不来,为什么?
Exit;
end;
end; WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);//如果将这一行注释掉,编译通不过,为什么?
end;
2.PostQuitMessage是执行系统的消息,如果去了,就无法处理程序消息,这样程序窗体消毁了,但是就无法处理系统的撤消的消息
3.这是处理windows的消息过程,是必段的,因为windows就是用消息驱动的,这是他的基本原素