Программирование устройств в Windows: Методические указания к выполнению практических и лабораторных работ по курсу “Операционные системы, среды и оболочки”, страница 10

PostQuitMessage(0);

Exit;

end;

end;

WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);

end;

{******                  Регистрация класса окна                         *******}

function WinRegister: Boolean;

{------ Назначение: Заполняет структуру для создания класса окна  }

{------   TWndClass = packed record                                       ------}

{------     style: UINT;             - стиль окна                         ------}

{------     lpfnWndProc: TFNWndProc; - ссылка на оконную функцию------}

{------     cbClsExtra: Integer;     - расширенные атрибуты класса        ------}

{------     cbWndExtra: Integer;     - расширенные атрибуты окна          ------}

{------     hInstance: HINST;        - Уникальный                         ------}

{------     hIcon: HICON;            - ссылка на Icon                     ------}

{------     hCursor: HCURSOR;        - ссылка на курсор                   ------}

{------     hbrBackground: HBRUSH;   - кисть                              ------}

{------     lpszMenuName: PAnsiChar; - меню                               ------}

{------     lpszClassName: PAnsiChar; - имя класса(должно быть уникальным)}

{------   end;                                                            ------}

var

WndClass: TWndClass;

begin

WndClass.Style := cs_hRedraw or cs_vRedraw;

WndClass.lpfnWndProc := @WindowProc;

WndClass.cbClsExtra := 0;

WndClass.cbWndExtra := 0;

WndClass.hInstance := HInstance;

WndClass.hIcon := LoadIcon(0, idi_Application);

WndClass.hCursor := LoadCursor(0, idc_Arrow);

{ Цвет кисти устанавливается как цвет окна по умолчанию в Windows }

WndClass.hbrBackground := HBrush(Color_Window);

WndClass.lpszMenuName := nil;

WndClass.lpszClassName := AppName;

Result := RegisterClass(WndClass) <> 0;

end;

{ Создание класса окна }

function WinCreate: HWnd;

var

hWindow: HWnd;

begin

hWindow := CreateWindow(AppName, 'Hello, Windows!!',

ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,

cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);

if hWindow <> 0 then begin

{ Изображение окна }

ShowWindow(hWindow, CmdShow);

{ Перерисовка внутри окна }

UpdateWindow(hWindow);

end;

Result := hWindow;

end;

var

AMessage: TMsg;

hWindow: HWnd;

begin

{ Попытка зарегистрировать окно}

if not WinRegister then begin

MessageBox(0, 'Регистрация прервана', nil, mb_Ok);

Exit;

end;

{ Попытка создать окно}

hWindow := WinCreate;

if hWindow = 0 then begin

MessageBox(0, 'Не удалось создать окно', nil, mb_Ok);

Exit;

end;

{ Цикл обработки сообщений }

while GetMessage(AMessage, 0, 0, 0) do begin

TranslateMessage(AMessage);

DispatchMessage(AMessage);

end;

Halt(AMessage.wParam);

end.

4.2   Программа определения нажатия  клавиши на клавиатуре

program Windowk;

uses

Windows, Messages ,Vclcom;

const

AppName = 'First';

function WindowProc(Window: HWnd; AMessage, WParam,

LParam: Longint): Longint; stdcall; export;

procedure  KeyMouse_OnChar(hWindow:HWnd; var Msg:TWMChar);

var

S:string;

DC:HDC;

begin

DC:=GetDC(hWindow);

S:='klav';

{S:= Format ('WM_CHAR==Ch = %S cRepeat =%d Scan =%d' ,

[(Char(msg.CharCode),msg.cRepeat,Msg.ScanCode]) ;}

SetBkColor(DC,GetSysColor(COLOR_3DFACE));

TextOut(DC,20,20,PChar(S),Length(S));

ReleaseDC(hWindow,DC);

end;

procedure  KeyMouse_OnDestroy(hWindow:HWnd; var Msg:TWMDestroy);

begin

PostQuitMessage(0);

end;

var

AMsg: TMessage;

begin

AMsg.Msg:=AMessage;

AMsg.WParam:=WParam;

AMsg.LParam:=LParam;

AMsg.Result := 0;

case AMessage of

wm_Char: KeyMouse_OnChar(Window, TWMChar(AMsg));

wm_Destroy: KeyMouse_OnDestroy(Window, TWMDestroy(AMsg));

else

WindowProc:=DefWindowProc(Window,AMessage, WParam,LParam);

Exit;

end;

Result:=AMsg.Result ;

end;

function WinRegister: Boolean;

var

WndClass: TWndClass;

begin

WndClass.Style := cs_hRedraw or cs_vRedraw;

WndClass.lpfnWndProc := @WindowProc;

WndClass.cbClsExtra := 0;

WndClass.cbWndExtra := 0;

WndClass.hInstance := HInstance;

WndClass.hIcon := LoadIcon(0, idi_Application);

WndClass.hCursor := LoadCursor(0, idc_Arrow);

WndClass.hbrBackground := HBrush(Color_Window);