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

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

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

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



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

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

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

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





Дата регистрации на форуме:
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
Быстрый переход в раздел:


Время выполнения скрипта: 0.0340. Количество выполненных запросов: 19, время выполнения запросов 0.0228