LAB4 (Методические указания к лабораторным работам), страница 3
Описание файла
Файл "LAB4" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование в среде windows" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование в среде windows" в общих файлах.
Онлайн просмотр документа "LAB4"
Текст 3 страницы из документа "LAB4"
Аналогичная функция предусмотрена для переключателей RADIOBUTTON:
void WINAPI CheckRadioButton (HWND hdlg, int idFirstButton, int idLastButton, int idCheckButton);
Эта функция может обслуживать сразу группу переключателей, имеющих идентификаторы от idFirstButton до idLastButton. Она включает переключатель с идентификатором idCheckButton, после чего выключает все остальные переключатели группы в указанном параметрами idFirstButton и idLastButton диапазоне идентификаторов.
Для определения текущего состояния переключателя вы можете воспользоваться функцией IsDlgButtonChecked:
UINT WINAPI IsDlgButtonChecked(HWND hdlg, int idButton);
Эта функция возвращает состояние переключателя с идентификатором idButton, расположенного в диалоговой панели hdlg. Если переключатель находится в выключенном состоянии, возвращается нулевое значение. Для включенного переключателя возвращается значение 1. Значение 2 соответствует неактивному переключателю, изображенному серым цветом. В случае ошибки возвращается отрицательное значение -1.
Если ваше приложение использует собственную логику для передачи фокуса ввода между органами управления, расположенными в диалоговой панели, ему может потребоваться информация о последовательности, в которой должен передаваться фокус ввода. С помощью функции GetNextDlgGroupItemприложение может определить идентификатор окна предыдущего или следующего органа управления в группе:
HWND WINAPI GetNextDlgGroupItem(HWND hdlg, HWND hwndControl, BOOL fPrevious);
В зависимости от значения флага fPrevious функция возвращает идентификатор предыдущего или следующего органа управления группе относительно органа управления с идентификатором hwndControl. Если значение флага fPrevious равно TRUE, функция возвращает идентификатор окна для предыдущего органа управления в группе, если FALSE - для следующего.
Функция GetNextDlgTabItem позволяет определить идентификатор окна для первого органа управления, который имеет стиль WS_TABSTOP и расположен после органа управления с заданным идентификатором или перед этим органом:
HWND WINAPI GetNextDlgTabItem(HWND hdlg, HWND hwndControl, BOOL fPrevious);
Параметр hwndControl определяет орган управления, начиная с которого функция будет выполнять поиск, параметр fPrevious определяет направление поиска. Если значение параметра fPrevious равно TRUE, функция ищет предыдущий орган управления в группе, если FALSE - следующий.
Функция MapDialogRect преобразует координаты из единиц диалоговой панели (dialog units) в пиксели:
void WINAPI MapDialogRect(HWND hdlg, RECT FAR* lprc);
Преобразуемые координаты необходимо записать в структуру типа RECT, адрес которой указывается во втором параметре функции. Результат преобразования будет записан в эту же структуру.
Функция GetDialogBaseUnits возвращает двойное слово, содержащее информацию о диалоговой системе координат:
DWORD WINAPI GetDialogBaseUnits(void);
Младшее слово представляет собой ширину в пикселях диалоговой единицы длины, старшее - высоту.
Третий способ размещения органов управления на поверхности диалоговой панели предполагает использование специального редактора диалогов, такого как Borland Resource Workshop или Microsoft Dialog Editor. Эти редакторы позволяют нарисовать диалоговую панель и сохранить ее текстовое описание в файле ресурсов приложения.
Немодальные диалоговые панели
Другой вид диалоговых панелей, который мы рассмотрим, это немодальные диалоговые панели (modeless dialog boxes).
Немодальные диалоговые панели очень удобны для объединения различных инструментальных средств, предназначенных для работы с объектом, расположенным в главном окне или в дочернем окне, созданным главным окном приложения.
Создание и уничтожение немодальных диалоговых панелей
Для создания немодальных диалоговых панелей используются описанные нами ранее функции CreateDialog, CreateDialogParam, CreateDialogIndirect, CreateDialogIndirectParam.
Все эти функции возвращают идентификатор окна созданной диалоговой панели, который можно использовать для посылки сообщений органам управления, расположенным в этой панели.
Для обеспечения автоматического отображения немодальной диалоговой панели сразу после создания стиль панели, описанный в шаблоне, должен включать в себя константу WS_VISIBLE. В противном случае для отображения диалоговой панели придется вызывать функцию ShowWindow.
Завершение работы немодальной диалоговой панели следует выполнять с помощью функции DestroyWindow, указав ей в качестве параметра идентификатор окна панели, полученный от функции CreateDialog или от аналогичной функции, создающей немодальную диалоговую панель. Функция EndDialog должна использоваться только для завершения работы модальных диалоговых панелей.
Изменения в цикле обработки сообщений
При создании модальной диалоговой панели в приложении создается второй цикл обработки сообщений, который действует до завершения работы модальной диалоговой панели. Если же создается немодальная диалоговая панель, сообщения от органов управления, предназначенные для диалоговой панели, проходят через общую очередь сообщений приложения.
Для разделения этих сообщений цикл обработки должен вызывать функцию IsDialogMessage:
BOOL WINAPI IsDialogMessage(HWND hwndDlg, MSG FAR* lpmsg);
Функция IsDialogMessage определяет, предназначено ли сообщение, определяемое параметром lpmsg, для немодальной диалоговой панели с идентификатором окна, равным hwndDlg. Если предназначено, функция сама выполняет обработку такого сообщения и возвращает значение TRUE. В противном случае возвращается значение FALSE.
Задание.
1 | модальная | статический орган + кнопка |
2 | немодальная | Редактор текста+кнопка |
3 | немодальная | Listbox+ кнопка |
4 | модальная | Combobox+кнопка |
5 | модальная | статический орган + полоса просмотра |
6 | немодальная | Редактор текста+ полоса просмотра |
7 | немодальная | статический орган + кнопка |
8 | модальная | Редактор текста+кнопка |
9 | модальная | Listbox+ кнопка |
10 | немодальная | Combobox+кнопка |
11 | немодальная | статический орган + полоса просмотра |
12 | модальная | Редактор текста+ полоса просмотра |
13 | модальная | статический орган + кнопка |
14 | немодальная | Редактор текста+кнопка |
15 | немодальная | Listbox+ кнопка |
16 | модальная | Combobox+кнопка |
17 | модальная | статический орган + полоса просмотра |
18 | немодальная | Редактор текста+ полоса просмотра |
19 | немодальная | статический орган + кнопка |
20 | модальная | Редактор текста+кнопка |
21 | модальная | Listbox+ кнопка |
22 | немодальная | Combobox+кнопка |
23 | немодальная | статический орган + полоса просмотра |
24 | модальная | Редактор текста+ полоса просмотра |
25 | модальная | статический орган + кнопка |
26 | немодальная | Редактор текста+кнопка |
Литература.
-
Фролов А.В., Фролов Г.В. Программирование для Windows NT.- М.:ДИАЛОГ МИФИ, 1996.
-
Верма Р.Д. Справочник по функциям WIN32 API.- М.: Горячая линия - Телеком, 2005.- 551 с. : ил.