Разговаривают в троллейбусе два студента-хаккера:
- У меня вчера вечером мать сдохла. Я с ней всю ночь протрахался, а она так и не ожила...
Старушка по соседству:
- ВО ИЗВЕРГИ!!!
program Plain2;
uses
Windows,
Messages;
const
id_Button = 100;
function PlainWinProc (hWnd: THandle; nMsg: UINT;
wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
Rect: TRect;
begin
Result := 0;
case nMsg of
wm_Create:
// create button
CreateWindowEx (0, // extended styles
'BUTTON', // predefined class
'&Click here', // caption
ws_Child or ws_Visible or ws_Border
or bs_PushButton, // styles
0, 0, // position: see wm_Size
200, 80, // size
hwnd, // parent
id_Button, // identifier (not a menu handle)
hInstance, // application idnil); // init info pointer
wm_Size:
begin// get the size of the client window
GetClientRect (hWnd, Rect);
// move the button window
SetWindowPos (
GetDlgItem (hWnd, id_Button), // button handle
0, // zOrder
Rect.Right div 2 - 100,
Rect.Bottom div 2 - 40,
0, 0, // new size
swp_NoZOrder or swp_NoSize);
end;
wm_Command:
// if it comes from the buttonif LoWord (wParam) = id_Button then// if it is a clickif HiWord (wParam) = bn_Clicked then
MessageBox (hWnd, 'Button Clicked',
'Plain API 2', MB_OK);
wm_Destroy:
PostQuitMessage (0);
else
Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
end;
end;
procedure WinMain;
var
hWnd: THandle;
Msg: TMsg;
WndClassEx: TWndClassEx;
begin// initialize the window class structure
WndClassEx.cbSize := sizeOf (TWndClassEx);
WndClassEx.lpszClassName := 'PlainWindow';
WndClassEx.style := cs_VRedraw or cs_HRedraw;
WndClassEx.hInstance := HInstance;
WndClassEx.lpfnWndProc := @PlainWinProc;
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon (hInstance,
MakeIntResource ('MAINICON'));
WndClassEx.hIconSm := LoadIcon (hInstance,
MakeIntResource ('MAINICON'));
WndClassEx.hCursor := LoadCursor (0, idc_Arrow);;
WndClassEx.hbrBackground := GetStockObject (white_Brush);
WndClassEx.lpszMenuName := nil;
// register the classif RegisterClassEx (WndClassEx) = 0 then
MessageBox (0, 'Invalid class registration',
'Plain API', MB_OK)
elsebegin
hWnd := CreateWindowEx (
ws_Ex_OverlappedWindow, // extended styles
WndClassEx.lpszClassName, // class name
'Plain API Demo', // title
ws_OverlappedWindow, // styles
cw_UseDefault, 0, // position
cw_UseDefault, 0, // size
0, // parent window
0, // menu
HInstance, // instance handlenil); // initial parametersif hWnd = 0 then
MessageBox (0, 'Window not created',
'Plain API', MB_OK)
elsebegin
ShowWindow (hWnd, sw_ShowNormal);
while GetMessage (Msg, 0, 0, 0) dobegin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end;
end;
end;
begin
WinMain;
end.
Программа на Delphi, созданная с использованием Plain API (Windows API), которая создает простой окно с кнопкой. Вот разбивка кода:
PlainWinProc
Это функция обработки оконных сообщений, которая проверяет различные сообщения Windows, такие как wm_Create, wm_Size и wm_Command. Для каждого сообщения она выполняет конкретные действия, такие как создание кнопки или обрабатывает клик по кнопке.
В wm_Create она создает кнопку с надписью "Click here" с помощью функции CreateWindowEx.
В wm_Size она получает размер клиентского окна и перемещает кнопку в конкретное положение (центрально горизонтально и вертикально).
В wm_Command она проверяет, если сообщение пришло от кнопки. Если так, она выводит сообщение с текстом "Button Clicked".
WinMain
Это основной входной точкой программы. Она инициализирует структуру класса окна, регистрирует класс, создает окно с помощью функции CreateWindowEx и отображает окно.
Она определяет переменную TWndClassExWndClassEx, чтобы хранить информацию о классе окна.
Она настраивает различные свойства, такие как заголовок окна, стиль, иконку, курсор и фоновую кисть.
Она регистрирует класс окна с помощью функции RegisterClassEx.
Если регистрация неудачна, она выводит сообщение об ошибке.
Она создает окно с указанным именем класса, заголовком и размером с помощью функции CreateWindowEx.
Если создание неудачно, она выводит еще одно сообщение об ошибке.
Наконец, она отображает окно с помощью функции ShowWindow.
Замечания
Эта программа использует синтаксис Delphi и библиотеки (Windows и Messages).
Plain API используется для создания простого окна с кнопкой.
Код написан в старом стиле, с длинными именами переменных и явным кастингом типов.
Нет комментариев или документации, чтобы объяснить цель каждого части кода.
В целом, это программа демонстрирует, как создать базовое окно с кнопкой с помощью Plain API.
Создание формы и кнопки на чистом API: в статье описано создание оконной приложения с использованием функций Windows API, а также создание кнопки и обработка события ее клика.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.