Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Структура тексту додатку






Структура тексту додатку визначається двома вимогами:

1. Текст містить опис функції з іменем WinMain;

2. Якщо реєструються нові класи, то текст містить опис структури типу WNDCLASS і функцій вікон цих класів.

Наступний додаток (лістинг 1.1) реєструє клас вікон, що перекриваються, створює вікно цього класу і передає управління циклу обробки повідомлень. Проект додатку містить декілька частин.

1. В окремому файлі (Functions.cpp) описано функцію RegClass. Текст файлу Functions.cpp:

#include “Functions.h”

BOOL RegClass (WNDPROC Proc, LPCTSTR szName, UINT brBackground)

{ WNDCLASS wc;

wc.style=0;

wc.cbClsExtra=wc.cbWndExtra=0;

wc.lpfnWndProc=Proc;

wc.hInstance=hInstance;

wc.hIcon=LoadIcon(NULL, IDI_APPLICATION;

wc.hCursor=LoadCursor(NULL, IDC_ARROW);

wc.hbrBachground=(HBRUSH) (brBackground+1);

wc.lpszMenuName=(LPCTSTR) NULL;

wc.lpszClassName=szName;

return (RegisterClass(& wc)! =0); }

2. Тут використовується файл заголовків Functions.h:

#include < windows.h>

extern HINSTANCE hInstance;

//Оголошення функцій

BOOL RegClass(WNDPROC LPCTSTR, UINT);

3. В файлі Extmpl11.cpp описані головні змінні і функції:

#include “Functions.h”

//оголошення функцій

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

//опис глобальних змінних

HINSTANCE hInstance;

Char szClassName[]=”WindowAppClass”;

//опис головної функції

INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE, PSTR, INT nCmdShow)

{ MSG msg; HWND hwnd; hInstance=hInst;

if (! RegClass(WndProc, szClassName, COLOR_WINDOW)) return FALSE;

hwnd=CreateWindow(szClassName, “Приклад”,

WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, NULL);

if (! hwnd) return FALSE;

while (GetMessage(& msg, NULL, 0, 0)) DispatchMessage(& msg);

return (int) msg.wParam; }

//опис функції вікон

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{ switch(msg)

{case WM_DESTROY:

{PostQuitMessage(0);

return 0; }}

return DefWindowProc(hwnd, msg, wParam, lParam); }

Відмінність від звичних програм міститься в заголовку головної функції, в специфічній функції вікна і в способі її виклику.

Розглянемо алгоритм роботи цього додатку:

1. класи вікон реєструють на початку роботи додатку;

2. вікно додатку створюють до передачі управління циклу обробки повідомлень;

3. відсутні виклики функцій ShowWindow s UpdateWindow. Це обумволено тим, що вікно створене зі стилем WS_VISIBLE. В такому випадку функція CreateWindow надсилає всі повідомлення, які необхідні для відображення створеного вікна і перемалювання його робочої області;

4. управління передають циклу обробки повідомлень. В тілі цього циклу обираються і розподіляються повдомлення;

5. функція вікна обробляє повідомлення WM_DESTROY, а останні повідомлення повертає системі. Функція вікна додатку повинна обробляти це повідомлення;

6. додаток завершує роботу.

Може здаватися, що відображення і видалення вікна – надто проста задача для такого “складного” тексту. Проаналізуємо, що ж насправді може зробити цей додаток. Стиль повністю визначає зовнішню поведінку вікна. Завдяки стилю WS_OVERLAPPEDWINDOW вікно містить подвійні рядки зміни розмірів і заголовок, в області заголовка розташовані системне меню і кнопки для згортання, відновлення розмірів і закриття вікна. За допомогою цих елементів можна переміщати вікно, змінювати його розміри, згортати вікно в піктограму, відновлювати і закривати вікно.

Функційні можливості вікна могли б бути й ширше. Це вікно приймає всі повідомлення від користувача, системи та інших вікон. Тобто воно готове співпрацювати з користувачем і відкрити доступ до ресурсів системи. Але опис функції вікна містить обробку лише одного повідомлення. Останні повідомлення вона не обробляє і передає системі. По суті, вони видаляються з черги повідомлень.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.