Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П 2. Органы управления

Как отмечалось выше, окно может принадлежать только к зарегистрированному классу, и его необходимо создать и ото­бразить. После этого оно способно показывать свои возможности. Об­щение пользователя с приложением не ограничивается созерцанием отображаемых элементов и ответами в форме нажатия на одну из кнопок. Чаще всего обмен информацией между пользователем и приложением происходит в более сложной форме. Операционная система сама описы­вает несколько классов окон. Эти окна позволяют настраивать интер­фейс в соответствии с потребностями решаемой задачи и возможностями пользователя. Такие классы называют органами управления. Это хо­рошо знакомые кнопки, статические органы, списки, редакторы, комбинированные списки, полосы прокрутки.

Отличительные черты органов управления:

• для них уже описаны классы окон;

• все они дочерние окна (стиля WS_CHILD);

• для них описаны дополнительные стили и списки обрабатывае­мых и получаемых сообщений;

• для них почти всегда нужно описывать идентификаторы.

Родительское окно от дочерних окон получает сообщения. Получен­ное сообщение содержит идентификатор дочернего окна - отправителя сообщения. И функция родительского окна всегда сможет определить это дочернее окно.

П 2.1. Кнопки

2.1.1. Создание кнопок

Для создания кнопки можно вызвать хорошо знакомую функцию CreateWindow.

Вспомним синтаксис этой функции:

HWND CreateWindow(

LPCTSTR lpclassName, //Указатель на имя класса

LPCTSTR fpWindowName, //Указатель на имя окна

DWORD dwStyle, //Стиль окна

int x, //Координата левого края окна

int у, //Координата верхнего края окна

int nWidth, //Ширина окна

int nHeight, //Высота окна

HWND hWndParent, //Дескриптор окна-родителя или окна-владельца

HMENU hMenu, //Дескриптор меню или идентификатор дочернего окна HANDLE hinstance, //Дескриптор экземпляра приложения

LPVOID IpParam //Указатель на данные окна

Вызов функции CreateWindow для создания кнопки обладает сле­дующими особенностями.

1. В качестве lpClassName указывают имя класса "button".

2. Аргумент lpWindowName определяет строку, которая будет напи­сана на кнопке.

3. Аргумент dwStyle задает стиль кнопки. Его значение задают комбина­цией константы WS_CHILD, константы с префиксом BS_ (табл.7) и, поч­ти всегда, константы WS_VISIBLE. Можно указывать только одну кон­станту из табл. 7. Исключением являются константы BS_LEFTTEXT и BS_RIGHTBUTTON. Эти константы используют совместно с другими константами табл. 7 при создании флажков и переключателей с тек­стом, расположенным слева от квадратика флажка или кружка переключателя.

4. Значение hWndParent определяет родительское окно, в рабочей об­ласти которого создается кнопка. Дескриптор окна-родителя указывают обязательно.

5. Значение hMenu должно быть равно идентификатору кнопки.

6 Для органов управления в качестве IpParam указывают NULL.

Алгоритм создания кнопки:

1. Описать идентификатор кнопки. Например, это можно сделать так:

#define lD_BUTTON 3000

С помощью этого идентификатора функция окна-родителя будет "уз­навать" кнопку. В описании идентификатора можно использовать произ­вольное целочисленное значение.

2. Описать дескриптор дочернего окна дня кнопки. Например, в те­ле функции родительского окна это можно сделать следующим образом:

static HWND hButton;,

3. Создать кнопку. Например, следующий оператор в левом верхнем углу рабочей области окна создает обычную кнопку с черной рамкой шириной в 200 и высотой в 20 пикселей с текстом "Пример кнопки":

hButton = CreateWindow("button", "Пример кнопки”,

WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,

0,0,200,20, hwnd, (HMENU)ID_BUTTON, hinstance, NULL);