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

Форма входа

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

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

Наш опрос

Какая скорость вашего интернета?
Всего ответов: 165


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

    Статистика


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

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


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

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

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

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Пишем программу на чистом WinAPI(часть 2) (Button, Edit, Label!)
Пишем программу на чистом WinAPI(часть 2)
KostiaДата: Понедельник, 18.02.2008, 11:06 | Сообщение # 1
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
В предыдущем уроке я рассказал как создавать окно, но от него мало проку, на много лучше было бы разместить на этой форме кнопочки и т.д.
Я приведу пример самой тупой программы! Есть две кнопки(Start, Exit) двы lebel и Edit. Ползователь вводит свое имя жмет start и во втором label пишется 'Привет name'!
Для того чтобы создать все необходимые элементы нужно завести переменные типа HWND!
В глобальных переменных

var
btn1,btn2: Hwnd;
label1,label2: Hwnd;
Edit: Hwnd;

И для того, чтобы определить какая кнопка нажата, нужно завести индивидуальный номер для каждой кнопки
Перед глобальными переменными

const
BTN_1=100;
BTN_2=101;

Теперь создадим все необходимое
Перед ShowWindow(pWnd, SW_SHOW); пишем

Code
Label1:= CreateWindow('Static', 'Ваше имя:',WS_VISIBLE or WS_CHILD or SS_LEFT,
                    2, 2, // положение
                    180, 16, // размер ширина/высоту
                    pWnd, // на каком окне
                    0, hInstance, nil);
      Label2:= CreateWindow('Static', '',WS_VISIBLE or WS_CHILD or SS_LEFT,
                    2, 35, 180, 16, pWnd, 0, hInstance, nil);
      Edit := CreateWindowEx( WS_EX_STATICEDGE, 'Edit', '',
                    WS_VISIBLE or WS_CHILD,
                    2, 15, 148, 20, pWnd, 0, hInstance, nil );
      Btn1 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Start',
                    BS_DEFPUSHBUTTON or WS_VISIBLE or WS_CHILD,
                    2, 50, 73, 25, pWnd, BTN_1, hInstance, nil );
      Btn2 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Exit',
                    BS_DEFPUSHBUTTON or WS_VISIBLE or WS_CHILD,
                    75, 50, 73, 25, pWnd, BTN_2, hInstance, nil );

Теперь будим обрабатывать события
В функции WindowProc в case добавляем новый тип сообщений

Code
WM_COMMAND: case LoWord( wParam ) of
        BTN_2: DestroyWindow(pwnd);
        BTN_1:begin
            s:='';
            GetWindowText(edit,s,255);
            SetWindowText(label2,pchar('Привет '+s));
          end;
        end;

Вот весть код программы:

Code
program Project1;
uses
    Windows, Messages;

const
    BTN_1=100;
    BTN_2=101;

var
    wc   : TWndClassEx; // окно
    pWnd : HWND;
    pMsg : TMsg;
    btn1,btn2: Hwnd;
    label1,label2: Hwnd;
    Edit: Hwnd;

function WindowProc(wnd: HWND; Msg: Integer; wParam: wParam; lParam: lParam): Lresult; stdcall;
var
    ps:TPaintStruct;
    s: array[0..255]of char;
begin
      Result:=0;
      case msg of
       WM_COMMAND: case LoWord( wParam ) of
         BTN_2: DestroyWindow(pwnd);
         BTN_1:begin
             s:='';
             GetWindowText(edit,s,255);
             SetWindowText(label2,pchar('Привет '+s));
           end;
         end;
       WM_CREATE:
        begin
        end;
       WM_DESTROY:
        begin
          Halt;
        end;
       WM_PAINT:
        begin
          BeginPaint(pwnd,ps);

          EndPaint(pwnd,ps);
        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, 158, 148, 0, 0,
         Hinstance, nil);
       Label1:= CreateWindow('Static', 'Ваше имя:',WS_VISIBLE or WS_CHILD or SS_LEFT,
                     2, 2, 180, 16, pWnd, 0, hInstance, nil);
       Label2:= CreateWindow('Static', '',WS_VISIBLE or WS_CHILD or SS_LEFT,
                     2, 35, 180, 16, pWnd, 0, hInstance, nil);
       Edit := CreateWindowEx( WS_EX_STATICEDGE, 'Edit', '',
                     WS_VISIBLE or WS_CHILD,
                     2, 15, 148, 20, pWnd, 0, hInstance, nil );
       Btn1 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Start',
                     BS_DEFPUSHBUTTON or WS_VISIBLE or WS_CHILD,
                     2, 50, 73, 25, pWnd, BTN_1, hInstance, nil );
       Btn2 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Exit',
                     BS_DEFPUSHBUTTON or WS_VISIBLE or WS_CHILD,
                     75, 50, 73, 25, pWnd, BTN_2, 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.


Сообщение отредактировал Kostia - Понедельник, 18.02.2008, 11:07
 
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Пишем программу на чистом WinAPI(часть 2) (Button, Edit, Label!)
Страница 1 из 11
Поиск: