第一步:
_InitExe windows调用Exe的入口
_StartExe
InitUnits
第二步:
InitControls的initialization部分
TApplication.Create
AllocateHWnd
AllocateHWnd
MakeObjectInstance
StdWndProc
Instance^.FMethod := TMethod(AMethod);
AMethod==首次创建App时对应PopupControlProc
PMethod = ^TMethod;
``TMethod = recordCode, Data: Pointer;
public
class operator Equal(const Left, Right: TMethod): Boolean; inline;
class operator NotEqual(const Left, Right: TMethod): Boolean; inline;
class operator GreaterThan(const Left, Right: TMethod): Boolean; inline;
class operator GreaterThanOrEqual(const Left, Right: TMethod): Boolean; inline;
class operator LessThan(const Left, Right: TMethod): Boolean; inline;
class operator LessThanOrEqual(const Left, Right: TMethod): Boolean; inline;
end;
第三部:
- Application.Initialize;
- Application.Run;
第四步:
HandleMessage
TApplication.ProcessMessage
PeekMessage
TranslateMessage
DispatchMessageWi->
StdWndProc
TWinControl.MainWndProc
WindowProc: TWndMethod【TControl】
TControl.WndProc【初始化时指定FWindowProc := WndProc;】
TControl.WndProc
procedure TCustomForm.WndProc(var Message: TMessage);
基于多态性调用父类TControl的WndProc
Dispatch->TObject.Dispath->消息回调函数
DefaultHandler
项目编译时,跳过资源编译的编译选项
<SkipResGeneration>true</SkipResGeneration>