Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Написание программ на чистом API

Delphi , Синтаксис , API реализация

Написание программ на чистом API


program SmallPrg;

uses
  Windows, Messages;

const
  WinName = 'MainWClass';

function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
begin
  //подпрограмма обработки сообщений
  case AMessage of
    WM_DESTROY:
    begin
      PostQuitMessage(0);
      Result := 0;
      Exit;
    end;
    else
      Result := DefWindowProc(Window, AMessage, WParam, LParam);
  end;
end;

function InitApplication: Boolean;
var
  wcx: TWndClass;
begin
  //Заполняем структуру TWndClass
  // перерисовываем, если размер изменяется
  wcx.style := CS_HREDRAW or CS_VREDRAW;
  // адрес оконной процедуры
  wcx.lpfnWndProc := @MainWndProc;
  wcx.cbClsExtra := 0;
  wcx.cbWndExtra := 0;
  // handle to instance
  wcx.hInstance := hInstance;
  // загружаем стандандартную иконку
  wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
  // загружаем стандартный курсор
  wcx.hCursor := LoadCursor(0, IDC_ARROW);
  // делаем светло-cерый фон
  wcx.hbrBackground := COLOR_WINDOW;
  // пока нет главного меню
  wcx.lpszMenuName := nil;
  // имя класса окна
  wcx.lpszClassName := PChar(WinName);

  // Регистрируем наш класс окна.
  Result := RegisterClass(wcx) <> 0;
end;

function InitInstance: HWND;
begin
  // Создаем главное окно.
  Result := CreateWindow(
  // имя класса окна
  PChar(WinName),
  // заголовок
  'Small program',
  // стандартный стиль окна
  WS_OVERLAPPEDWINDOW,
  // стандартные горизонтальное, вертикальное положение, ширина и высота
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  0,//нет родительского окна
  0,//нет меню
  hInstance, // handle to application instance
  nil); // no window-creation data
end;

var
  hwndMain: HWND;
  AMessage: msg;
begin
  if (not InitApplication) then
    MessageBox(0, 'Ошибка регистрации окна', nil, mb_Ok)
  else
  begin
    hwndMain := InitInstance;
    if (hwndMain = 0) then
      MessageBox(0, 'Ошибка создания окна', nil, mb_Ok)
    else
    begin
      // Показываем окно и посылаем сообщение WM_PAINT оконной процедуре
      ShowWindow(hwndMain, CmdShow);
      UpdateWindow(hwndMain);
      while (GetMessage(AMessage, 0, 0, 0)) do
      begin
        TranslateMessage(AMessage);
        DispatchMessage(AMessage);
      end;
    end;
  end;

end.

Программа на Delphi, написанная на языке Object Pascal, создает простое приложение Windows с использованием Win32 API.

Главная процедура Главная процедура (SmallPrg) является точкой входа в программу.

Клауза Uses Клауза Uses импортирует два модуля: Windows и Messages. Эти модули обеспечивают доступ к функциям Win32 API для создания окон, обработки сообщений и т.д.

Константы Константа WinName определяет имя класса окна (MainWClass).

Процедура MainWndProc Это основная процедура окна (WNDPROC), которая обрабатывает сообщения, отправленные в приложение. Процедура использует оператор case для обработки различных типов сообщений:

  • WM_DESTROY: Когда окно уничтожается, программа вызывает PostQuitMessage(0) для выхода из цикла сообщений.
  • Все другие сообщения: Программа вызывает DefWindowProc(Window, AMessage, WParam, LParam) для передачи сообщения в стандартную процедуру окна для обработки.

Функция InitApplication Функция инициализирует приложение, зарегистрировав новый класс окна (TWndClass) с помощью функции RegisterClass(). Структура TWndClass содержит информацию о классе окна,such as its style, icon, cursor, background color and menu name.

Функция проверяет успешность регистрации, сравнивая возвращаемое значение с нулём.

Функция InitInstance Функция создает новый экземпляр основного окна приложения с помощью функции CreateWindow().

Цикл сообщений Программа использует цикл while для обработки сообщений, отправленных в приложение. Она вызывает GetMessage() для получения следующего сообщения и затем обрабатывает его, вызывая TranslateMessage() и DispatchMessage().

Обработка ошибок Если любая из функций инициализации fails (например, регистрация или создание окна), программа отображает сообщение об ошибке с помощью функции MessageBox().

Описывается пример программы на чистом API Delphi, которая создает окно и обрабатывает сообщения с помощью функции MainWndProc.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: API реализация ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:22:05/0.0037171840667725/0