先思考一个问题,为什么每个delphi程序(泛指一个exe)都会在任务栏上有一个类似button的东西呢?
这是因为有了窗口才会有这个东东出现。那什么样的窗口可以会在任务栏出现button东东呢?让我们进入delphi源代码吧!
查TApplication代码实现,可以发现会执行createhandle:
procedure TApplication.CreateHandle;
var
TempClass: TWndClass;
SysMenu: HMenu;
begin
if not FHandleCreated and not IsConsole then
begin
FObjectInstance := Classes.MakeObjectInstance(WndProc);
if not GetClassInfo(HInstance, WindowClass.lpszClassName, TempClass) then
begin
WindowClass.hInstance := HInstance;//指明窗口的应用程序实例句柄
if Windows.RegisterClass(WindowClass) = 0 then
raise EOutOfResources.Create(SWindowClass);
end;
FHandle := CreateWindow(WindowClass.lpszClassName, PChar(FTitle),
WS_POPUP or WS_CAPTION or WS_CLIPSIBLINGS or WS_SYSMENU
or WS_MINIMIZEBOX,
GetSystemMetrics(SM_CXSCREEN) div 2,//