Program Api2;
uses
Windows, Messages;
var
window,window2: TWndClassEx;
Mwindow: HWND;
Mmsg: TMsg;
function MDIWndProc(Wnd: HWND; uMsg: UINT; lP: LPARAM; wP: WPARAM): LRESULT; stdcall;
begin
case uMsg of
WM_CREATE: ;
else
Result := DefMDIChildProc(Wnd, uMsg, wP, lP);
end;
end;
function GetMDIWnd(AParent: HWND; AInst: HMODULE): HWND; stdcall;
begin
window2.Style := CS_HREDRAW or CS_VREDRAW; //стиль класса главного окна
window2.hIcon := LoadIcon(Mwindow, IDC_ARROW); //иконка программы
window2.lpfnWndProc := @MDIWndProc; //назначение обработчика сообщений
window2.hInstance := HInstance;
window2.hbrBackground := COLOR_BTNFACE + 1; //цвет окна
window2.lpszClassName:='Child_Window'; //класс окна
window2.hCursor := LoadCursor(0, IDC_ARROW); //активный курсор
if RegisterClassEx(window2) = 0 then MessageBox(AParent, 'Класс Child не зарегистрирован', 'Сообщение', MB_OK);
Mwindow := CreateWindowEx(0, 'Child_Window', 'Child',
WS_SYSMENU or WS_CAPTION or WS_CHILD or WS_CLIPCHILDREN or WS_VISIBLE,
50, 50,
300, 300,
0, 0, Mwindow, nil);
ShowWindow(Mwindow, SW_SHOW);
end;
// Процедура обработки сообщений
function WindowProc(wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL;
begin
case msg of
WM_Destroy:
begin
PostQuitMessage(0);
Result:=0;
Exit;
end;
else
Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
end;
// Регистрация созданого класса
begin
window.cbSize :=sizeof (window);
window.style :=CS_HREDRAW or CS_VREDRAW;
window.lpfnWndProc:=@WindowProc;
window.cbClsExtra :=0;
window.cbWndExtra :=0;
window.hInstance :=HInstance;
window.hIcon :=LoadIcon (0,IDI_APPLICATION);
window.hCursor :=LoadCursor (0,IDC_ARROW);
window.hbrBackground:=COLOR_APPWORKSPACE + 1; //цвет окна
window.lpszMenuName :=nil;
window.lpszClassName:='Main_Window';
RegisterClassEx (window);
// Создание основного окна
Mwindow:=CreateWindowEx(0,'Main_Window','First_WinAPI_Program',WS_OVERLAPPEDWINDOW or WS_VISIBLE,
CW_USEDEFAULT,SW_SHOWMAXIMIZED,800,600,0,0,Hinstance,nil);
GetMDIWnd(Mwindow, HInstance);
// Цикл обработки сообщений
while GetMessage(Mmsg,0,0,0) do
begin
TranslateMessage(Mmsg);
DispatchMessage(Mmsg);
end;
end.