Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   Windows API »   Образец программы на Windows API
RSS

Образец программы на Windows API

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Печать
 
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3031
Рейтинг пользователя: 75





Дата регистрации на форуме:
29 сен. 2001
Так как при написании программ на чистой Windows API есть довольно много участков кода, которые приходится копировать один в один без изменений, я решил выложить "скелет" такой програмы сюда. В этой программе регистрируется класс, создается одно окно данного класса, описывается основная оконная процедура и ряд процедур-обработчиков наиболее часто используемых оконных сообщений.
{
Образец написания простейшей программы на WinAPI
с вынесением обработчиков наиболее распространненых событий
в отдельные процедуры
© XXXX Pro, Объединенный Открытый Проект, 2006
Наш сайт в Интернете: http://www.openproj.ru
}
program WinAPI;

uses Windows,Messages;

const
  wndClassName = '4XP_WinAPI_simple'; // имя класса окна
  wndCaption = 'Заголовок окна'; // текст заголовка

var // глобальные переменные: handle окна и полученное сообщение
  wndH     : HWND;
  wndMsg   : TMsg;

// функция OnCreate — вызывается при создании окна
Function OnCreate(hwnd: HWND; var lParam: TCreateStruct):LRESULT;
Begin
  // здесь могут создаваться вложенные окна
  Result:=0; // 0 означает, что сообщение было успешно обработано.
  // если вернуть -1, то будет считаться, что окно создать не удалось и оно будет уничтожено
End;

Function OnCommand(hwnd:HWND; wNotifyCode:word; wID:word; hwndCtl:LPARAM):LRESULT;
Begin
Result:=0;
// обработчики сообщения OnCommand — полезно для диалоговых окон
End;

// процедура OnPaint — отрисовка содержимого окна
Procedure OnPaint(hwnd:HWND);
var
  PaintStr   :  TPaintStruct;
  hdc        :  THandle;
Begin
  hdc:=BeginPaint(hwnd,PaintStr); // начало отрисовки, получение контекста
// здесь производится отрисовка
  EndPaint(hwnd,PaintStr); // окончание отрисовки
  ReleaseDC(hwnd, hdc); // освобождение контекста
End;

// процедура OnDestroy — вызывается при уничтожении окна
Procedure OnDestroy;
Begin
  // здесь должны освобождаться все занятые прежде ресурсы
  PostQuitMessage(0);
End;

// основная оконная процедура
Function WindowProc(hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
Begin
  Result:=0; // по умолчанию результат обработки сообщения — 0
  case (Msg) of
WM_CREATE: Result:=OnCreate(hwnd,TCreateStruct(pointer(lParam)^));
WM_COMMAND: Result:=OnCommand(hwnd,HiWord(wParam),LoWord(wParam),lParam);
WM_PAINT:  OnPaint(hwnd);
WM_DESTROY: OnDestroy;
  else Result:=DefWindowProc(hwnd,Msg,wParam,lParam);  // вызов процедуры по умолчанию
  end;
End;

// регистрация оконного класса
Function RegisterWinClass:boolean;
var
  WinClass  :  TWndClass;
Begin
  WinClass.style:=CS_DBLCLKS or CS_HREDRAW or CS_OWNDC or CS_VREDRAW;
  WinClass.lpfnWndProc:=@WindowProc;
  WinClass.cbClsExtra:=0;
  WinClass.cbWndExtra:=0;
  WinClass.hInstance:=HInstance;
  WinClass.hIcon:=LoadIcon(0,IDI_APPLICATION);
  WinClass.hCursor:=LoadCursor(0,IDC_ARROW);
  WinClass.hbrBackground:=COLOR_BACKGROUND;
  WinClass.lpszMenuName:=nil;
  WinClass.lpszClassName:=wndClassName;
  Result:=RegisterClass(WinClass)<>0;
End;

// основная программа
BEGIN
  if (not RegisterWinClass) then MessageBox(0,'Ошибка при создании класса окна','Ошибка!',MB_OK  or MB_ICONSTOP)
  else begin
    wndH:=CreateWindow(wndClassName,wndCaption,WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInstance,nil);
    if (wndH=0) then MessageBox(0,'Ошибка при создании экземпляра окна','Ошибка!',MB_OK  or MB_ICONSTOP)
    else begin
      while (GetMessage(wndMsg,0,0,0)) do begin // цикл обработки сообщений
        TranslateMessage(wndMsg);
        DispatchMessage(wndMsg);
      end;
    end;
  end;
END.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
semiono
Долгожитель форума

semiono
Откуда: Арзамас
Всего сообщений: 383
Рейтинг пользователя: 2





Дата регистрации на форуме:
2 сен. 2006
Спасибо!
Нечто подобное есть для masm32: Win32 API. Урок 3. Простое окно

---
a peoples must know what is cost an opium for the race?
<<Назад  Вперед>>Печать
Объединенный Открытый Проект »   Программирование »   Windows API »   Образец программы на Windows API
RSS
Быстрый переход в раздел:
Реклама: Е1 авто тюнинг дверей. Все что Вы хотите купить для тюнинга авто ВАЗ.


Время выполнения скрипта: 0.4394. Количество выполненных запросов: 18, время выполнения запросов 0.1149
Rambler's Top100