Пишем программу на чистом WinAPI(часть 1) - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

Какой у вас компьютер ?
Всего ответов: 76


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

Пишем программу на чистом WinAPI(часть 1) - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Пишем программу на чистом WinAPI(часть 1) (Создаем окно)
Пишем программу на чистом WinAPI(часть 1)
KostiaДата: Понедельник, 18.02.2008, 08:00 | Сообщение # 1
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
В этой теме я постараюсь пролить свет на то, как создаются окна с помощью WinAPI функций и рассмотреть пару примеров!
Главным преимуществом созданием программ на чистом WinAPI, является размер программы, около 15 kb занимает пустая форма на WinAPI.
Начнем с того, что избавимся от стандартной формы:
View->Project Manager->Unit1->Remove->Ctrl+F12->Project1->OK
Перед вами появился такой код:
Code
program Project1;

uses
      Forms;

{$R *.res}

begin
      Application.Initialize;
      Application.Run;
end.

Измените его на:
Code
program Project1;

uses
      Windows, Messages;

begin

end.

Знакомые строки для Паскалевца.
После раздела uses нужно объявить несколько переменных:
Code
program Project1;
uses
      Windows, Messages;

var
     wc   : TWndClassEx; // окно
     pWnd : HWND;
     pMsg : TMsg;

begin

end.

Создадим окно:
Code
program Project1;
uses
Windows, Messages;

var
wc : TWndClassEx; // окно
pWnd : HWND;
pMsg : TMsg;
begin
wc.cbSize := sizeof(wc);
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hbrBackground:= COLOR_BTNFACE+1;
wc.lpszMenuName := nil;
wc.lpszClassName:= 'Prog';
RegisterClassEx(wc);
pWnd := CreateWindowEx(WS_EX_APPWINDOW, 'Prog', 'Prog',
WS_SYSMENU , getsystemmetrics(0)div 2-90, getsystemmetrics(1)div 2-90, 250, 254, 0, 0,
Hinstance, nil);
ShowWindow(pWnd, SW_SHOW);
end.
Если его компилировать, то ничего не увидите, программа создаст окно, покажет его(очень быстро) и дальше идет end. конец! Для того чтобы избежать это нам нужно завести бесконечный цикл, но если так поступить, то наша программа зависнет, для избежания этого нужно чтобы наша программа обрабатывала поступающие сообщения. Измените код написанный ранее на этот:
Code
program Project1;
uses
      Windows, Messages;

var
     wc   : TWndClassEx; // окно
     pWnd : HWND;
     pMsg : TMsg;

function WindowProc(wnd: HWND; Msg: Integer; wParam: wParam; lParam: lParam): Lresult; stdcall;
begin
     Result:=0;
     case msg of
      WM_CREATE:
       begin
       end;
      WM_DESTROY:
       begin
         Halt;
       end;
      WM_PAINT:
       begin
       end;
     else
      Result:=DefWindowProc(wnd,msg,wparam,lparam);
     end;
end;

begin
      wc.cbSize       := sizeof(wc);
      wc.lpfnWndProc  := @WindowProc;
      wc.cbClsExtra   := 0;
      wc.cbWndExtra   := 0;
      wc.hInstance    := HInstance;
      wc.hCursor      := LoadCursor(0, IDC_ARROW);
      wc.hbrBackground:= COLOR_BTNFACE+1;
      wc.lpszMenuName := nil;
      wc.lpszClassName:= 'Prog';       
      RegisterClassEx(wc);
      pWnd := CreateWindowEx(WS_EX_APPWINDOW, 'Prog', 'Prog',
        WS_SYSMENU , getsystemmetrics(0)div 2-90, getsystemmetrics(1)div 2-90, 250, 254, 0, 0,
        Hinstance, nil);
      ShowWindow(pWnd, SW_SHOW);
      while true do
      begin
       if peekmessage(pmsg,0,0,0,pm_remove)=true then
       begin
        TranslateMessage(pMsg);
        DispatchMessage(pMsg);
       end;
      end;
end.

То как работать с элементами управления я расскажу в следующей теме!
 
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Пишем программу на чистом WinAPI(часть 1) (Создаем окно)
Страница 1 из 11
Поиск: