Создание окна средствами API
program Project1; uses windows, messages; procedure MainPaint(hWindow: HWND; pt: TPaintStruct); begin SetBkMode(pt.hdc, TRANSPARENT); TextOut(pt.hdc, 1, 1, 'Window with API!', 38 ); end; procedure MainDestroy(hWindow: HWND); begin PostQuitMessage(0); end; // Процедура создания главного окна function MainWndProc(hWindow: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; export; var ps: TPaintStruct; begin Result := 0; case Msg of WM_PAINT: begin BeginPaint(hWindow, ps); MainPaint(hWindow,ps); EndPaint( hWindow, ps ); end; WM_DESTROY: MainDestroy(hWindow); else begin result := DefWindowProc( hWindow, Msg, wParam, lParam ); exit; end; end; // case end; // Главная процедура var wc: TWndClass; hWindow: HWND; Msg: TMsg; begin wc.lpszClassName := 'GenericAppClass'; wc.lpfnWndProc := @MainWndProc; wc.style := CS_VREDRAW or CS_HREDRAW; wc.hInstance := hInstance; wc.hIcon := LoadIcon(0, IDI_APPLICATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := (COLOR_WINDOW + 1); wc.lpszMenuName := nil; wc.cbClsExtra := 0; wc.cbWndExtra := 0; RegisterClass(wc); hWindow := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE, 'GenericAppClass', 'API', WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 400,300, 0, 0, hInstance, nil); ShowWindow(hWindow, CmdShow); UpDateWindow(hWindow); // Цикл сообщений while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; Halt(Msg.wParam); end.
После компиляции этого проекта, исполнимый файл будет весить приблизительно 17KB всего!!!
Комментарии