Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
388
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

26.Какое сообщение приходит окну при нажатии быстрых клавиш? Чем эти сообщения отличаются от аналогичных сообщений от пунктов меню и элементов управления?

27.Является ли диалоговая панель окном Windows? Чем они отличаются от перекрывающихся окон?

28.Какие существуют способы расположения элементов управления на диалоговой панели?

29.Какие шаги следует предпринять для создания диалоговой панели?

30.Какие типы диалоговых панелей существуют? Чем они отличаются друг от друга?

31.Чем отличаются модальные диалоги от системных модальных?

32.Что определяет ресурс шаблона диалога?

33.В каких единицах измерения задаются координаты и размеры элементов управления диалоговой панели?

34.Чему равняются основные единицы диалогового окна?

35.Что такое диалоговая процедура? Является ли она оконной функцией окна диалога?

36.Чем отличается диалоговая процедура от оконной и чем они похожи?

37.Получает ли диалоговая процедура сообщения WM_PAINT, WM_CREATE, WM_DESTROY? Как происходит обработка этих сообщений?

38.Когда в диалоговую процедуру поступает сообщение WM_COMMAND с идентификатором IDCANCEL?

39.Когда в диалоговую процедуру поступает сообщение WM_COMMAND с идентификатором IDOK?

40.Вызовом какой функции создается модальная диалоговая панель?

41.Возвращает ли функция создания модального диалога управление сразу же после вывода диалоговой панели?

42.Что должна сделать диалоговая процедура для того, чтобы модальная диалоговая панель прекратила свою работу?

43.Проходят ли сообщения для модальных диалоговых окон через очередь сообщений приложения?

44.Что следует сделать для всех дочерних окон элементов управления, если к ним необходимо обеспечить доступ с помощью клавиши <Tab>?

45.Что необходимо сделать для обеспечения передачи фокуса от одного переключателя к другому внутри группы?

46.Чем отличается поведение немодального и модального диалоговых окон?

47.Вызовом какой функции создается немодальная диалоговая панель?

48.Возвращает ли функция создания немодального диалога управление сразу же после вывода диалоговой панели?

49.Что необходимо сделать для того, чтобы немодальная диалоговая панель прекратила свою работу?

50.Можно ли прекратить работу немодального диалога функцией EndDialog?

51.Проходят ли сообщения для немодальных диалоговых окон через очередь сообщений приложения?

52.Какие изменения следует внести в цикл обработки сообщений для того, что немодальное диалоговое окно могло получать сообщения, предназначенные для него

Элементы управления

Любое стандартное приложение Windows использует различные элементы управления,

такие, как кнопки, полосы просмотра, редакторы текстов и т.д, реализованные в виде

дочерних окон.

Дочерние окна управления

Дочерние окна располагаются на поверхности окна родителя. Приложение может

создать в любом своем окне несколько элементов управления, которые будут перемещаться вместе с окном-родителем.

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

взаимодействовать с элементами управления, передавая или получая от них различные сообщения.

Дочернее окно управления обрабатывает сообщения мыши и клавиатуры и извещает родительское окно о том, что состояние дочернего окна изменилось. В этом случае

Дочернее окно становится для родительского устройством ввода. Оно инкапсулирует особые действия, связанные с графическим представлением окна на экране, реакцией на пользовательский ввод, и извещения другого окна при вводе важной информации.

Вызывая специальные функции, можно

динамически перемещать элемент управления (MoveWindow - функция определяет новое расположение и размеры окна в системе координат, связанной с родительским окном),

делать его активным или неактивным (EnableWindow, для определения,

является ли окно заблокированным, используется функция IsWindowEnabled),

скрывать его или отображать (ShowWindow),

изменять заголовок окна (SetWindowText),

уничтожить созданный элемент управления (DestroyWindow).

Создание дочерних окон

Для создания дочернего окна управления собственного класса, следует

определить класс окна и зарегистрировать его в Windows функцией

RegisterClass;

затем с помощью функции CreateWindow необходимо создать окно на основе этого класса.

Если создается одно из предопределенных дочерних окон управления, то для этого дочернего окна класс окна регистрировать не надо. Такой класс уже существует в Windows и имеет одно из следующих имен: “button”, ”edit”, “static”, “listbox”, “combobox” и “scrollbar”. Приложение просто использует одно из этих имен в качестве параметра в функции CreateWindow.

Параметр стиля окна функции CreateWindow более точно определяет вид и свойства дочернего окна управления. Windows включает в себя оконные процедуры, обрабатывающие сообщения тех дочерних окон, которые созданы на основе перечисленных классов.

Для создания дочернего окна элементов управления необходимо вызвать функцию CreateWindow. С помощью этой функции создаются все окна в приложениях. Прототип функции:

HWND CreateWindow(LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int

nHeight,HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID *lpParam);

Параметр функции lpClassName - указатель на строку, содержащую имя класса,

на базе которого создается окно. Для создания кнопки, например, необходимо указать имя класса “button”.

Параметр lpWindowName - указатель на строку, содержащую текст окна. Для элементов управления - это либо надпись на кнопке, либо текст в поле редактирования, либо что-то другое в зависимости от типа элемента управления.

Параметр dwStyle - стиль создаваемого окна. Этот параметр задается как логическая комбинация отдельных битов. Для дочерних окон управления

следует задать стиль как комбинацию констант WS_CHILD, WS_VISIBLE, WS_CLIPSIBLINGS и констант, определяющих стили элемента управления.

Параметры x и y определяют положение верхнего левого угла дочернего окна

относительно верхнего левого угла рабочей области родительского окна.

Параметры nWidth и nHeight определяют ширину и высоту создаваемого элемента управления.

Параметр hWndParent определяет дескриптор родительского окна, на поверхности которого создается дочернее окно.

Параметр hMenu - идентификатор порожденного (child) окна. Для каждого создаваемого дочернего окна необходимо определить собственный уникальный идентификатор. Родительское окно будет получать от дочерних окон сообщения WM_COMМAND. При помощи идентификатора элемента управления оконная

процедура родительского окна сможет определить дочернее окно, пославшее ей сообщение.

Параметр hInstance - дескриптор экземпляра копии приложения, которое создает окно. Необходимо использовать значение, передаваемое функции WinMain через параметр hInstаnce.

Последний параметр lpParam используется для передачи окну дополнительных данных. При создании дочерних окон управления он должен быть равен NULL.

Константы, идентифицирующие стили предопределенных классов элементов управления, определены в заголовочных файлах Windows и имеют соответственно следующие префиксы: BS_ - “button”, ES_ - ”edit”, SS_ - “static”, LBS_ - “listbox”, CBS_ - “combobox” и SBS_ - “scrollbar”.

Пример создания обычной кнопки в оконной процедуре главного окна приложения (hInst – глобальная переменная, в которой хранится дескриптор экземпляра приложения, передаваемый в функцию WinMain; hWnd – дескриптор главного окна, передается в качестве параметра в его оконную процедуру):

static UINT ID_button=1; static HWND hWndButton;

. . .

hWndButton=CreateWindow("button","Exit", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|BS_PUSHBUTTON, x,y,width,height,hWnd,(HMENU)ID_button,hInst,NULL);

. . .

После вызова CreateWindow оконные процедуры дочерних окон управления внутри Windows поддерживают их работу и управляют всеми процессами перерисовки (за исключением кнопки стиля BS_OWNERDRAW).

Можно создавать свои собственные дочерние элементы управления, но есть также возможность использовать преимущества нескольких уже определенных классов окна (и оконных процедур), с помощью которых приложение может создавать стандартные дочерние окна управления, присутствующие обычно во всех Windowsприложениях.

Стандартные дочерние окна управления имеют вид кнопок, флажков, окон редактирования, списков, комбинированных списков, строк текста и полос прокрутки. В Windows производится обработка мыши этими окнами и их отрисовка, а приложение обрабатывает только сообщение WM_COMMAND,

которыми дочерние окна информируют оконную процедуру о различных событиях.