14. Определение диалоговой панели, взаимодействие пользователя с панелью (Ответы на вопросы билетов)
Описание файла
Файл "14. Определение диалоговой панели, взаимодействие пользователя с панелью" внутри архива находится в следующих папках: Ответы на вопросы билетов, WinAPI - Ответы на вопросы билетов. PDF-файл из архива "Ответы на вопросы билетов", который расположен в категории "". Всё это находится в предмете "api windows" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "api windows" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
1.Определение диалоговой панели, взаимодействие пользователя с панелью.Диалоговые панели – это предопределенный в Windows класс окон (dialog window class), на базе этогокласса создаются временные (pop-up) окна (иногда перекрывающиеся (overlapped) окна), на ихповерхности располагаются дочерние окна - органы управления. Диалоговые панели значительноупрощают использование органов управления, так как функция окна, соответствующая классу диалоговыхпанелей и расположенная внутри Windows, обеспечивает как взаимодействие органов управления междусобой, так и их взаимодействие с приложением. В частности, эта функция обеспечивает передачу фокусаввода от одного органа управления к другому при помощи клавиши <Tab> и клавиш перемещения курсора<Up> и <Down>, выполняет обработку сообщений от клавиш <Enter> и <Esc>.Расположение органов управления на диалоговой панели задается 3 способами:1) В файле ресурсов задается текстовое описание шаблона диалоговой панели2) Использование специальных редакторов3) Создание шаблона диалоговой панели в памяти во время работы приложения (редко)Для создания диалоговой панели вы должны предпринять следующие действия:- создать шаблон диалога;- определить функцию диалога;- вызвать одну из функций создания диалога.1.
Создание шаблона.nameID DIALOG [load] [mem] x, y, width, heightCAPTION "Заголовок диалоговой панели"STYLEСтильBEGIN. . .описание органов управленияENDnameID – для идентификации шаблона (строка, число от 1 до 65535).[load] – необязательный; определяет момент загрузки меню в память. (PRELOAD – загрузка сразупосле запуска приложения, LOADONCALL – загрузка только при отображении)[mem] – необязательный; влияет на тип памяти, выделяемой для хранения шаблона (FIXED, MOVEABLE,DISCARDABLE – не перемещаемый, перемещаемый (по умолчанию), освобождаемый).STYLE - DS_MODALFRAME – модальная диалоговая панель, DS_SYSMODAL – системная модальнаядиалоговая панель, DS_LOCALEDIT – редакторы будут использовать память из сегмента данныхприложения, DS_NOIDLEMSG – если этот стиль не указан, то при переходе панели в видимое состояниеWindows посылает родительскому окну сообщение WM_ENTERIDLE., а также стили при работе с окнами.Перед BEGIN можно вставить а) CLASS "PrivateDlgClass" – диалоговая панель будет создана наоснове собственного класса, а не Windows; б) Font 10, “MS Serif” – сменить шрифтВ диалоговых панелях используется своя система единиц – чтобы диалоговая панель выгляделаодинаково при разлиных разрешениях! Ширина=1/4 средней ширины системного шрифта, высота=1/8, этодиалоговая единица, ее можно определить (0,35 мм - Европа, 0,376 мм):DWORD WINAPI GetDialogBaseUnits(void); (младшее слово – ширина, старшее – высота)Описания органов управления – используются три формата строк.1) CtlType "Текст", ID, x, y, width, height [,style] - для всех, кроме списков, редакторов текста и полосыпросмотра:CtlType - обозначение органа управления.Параметр "Текст" определяет текст, который будет написан на органе управления.Параметр ID - идентификатор ОУ, передается вместе с сообщением WM_CONTROL.x и y - координаты органа управленияwidth и height - ширина и высота органа управления в единицах длины dialog unit.Параметр style определяет стиль органа управления (необязательный параметр).
Это тот самый стиль,который указывается при вызове функции CreateWindow.2) CtlType ID, x, y, width, height [,style] – для описания списков, редакторов текста и полос просмотра:В этом формате нет параметра "Текст", остальные параметры такие же, как и в первомформате.3) CONTROL "Текст", ID, class, style, x, y, width, height – универсальный (для любых органов управления)Этот формат позволяет описать орган управления, принадлежащий классу class, которыйуказывается в виде строки символов. Можно использовать для описания предопределенныхклассов органов управления, таких как "button", "combobox", "edit", "listbox", "scrollbar", "static".2. Создание функции диалога.Функция диалога, предназначенная для обработки сообщений от диалоговой панели:BOOL CALLBACK _export DlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam); - можно выбратьлюбое имя.
(HWND hdlg – идентификатор диалоговой панели)Как правило, функция диалога всегда обрабатывает сообщения WM_INITDIALOG (при инициализациидиалога) и WM_COMMAND, не обрабатывает WM_CREATE, WM_PAINT, WM_DESTROY. Не может вызватьфункцию обработки сообщений по умолчанию DefWindowProc.а) Сообщение WM_INITDIALOG использует параметры wParam (идентификатор ОУ, который первымполучит фокус ввода, первый, описанный в шаблоне WM_TABSTOP) и lParam (содержит значение,передаваемое приложением при создании диалоговой панели).б) Сообщение WM_COMMAND, поступающее в функцию диалога, передает сообщения илиизвещения от органов управления, расположенных в диалоговой панели.
Крое этого, функциядиалога может получить это сообщение с параметром wParam, равным константам IDOK иIDCANCEL (если нажата кнопка с данным идентификатором или закрытие с помощью системногоменю или клавиши <Esc>), описанным в файле windows.h.Сообщение с параметром IDOK поступает в том случае, если нажат <Enter> в момент, когда ни одна изкнопок, расположенных в диалоговой панели, не имеет фокус ввода, и ни одна из кнопок не имеет стильWS_DEFPUSHBUTTON. Если в диалоговой панели есть кнопка со стилем WS_DEFPUSHBUTTON, в описаннойситуации в функцию диалога поступает сообщение WM_COMMAND с параметром wParam, равнымидентификатору этой кнопки.3.
Вызов одной из функций создания диалогаДиалоговые панели бывают трех типов: модальные, системные модальные и немодальные.Модальная: главное окно приложения и его дочерние окна блокируются, перестают получатьсообщения от мыши и клавиатуры. Но есть возможность работать с другими приложениями.
Чтобы и этозапретить – системные модальные диалоговые панели.Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочернихокон. Вы можете работать как с диалоговой панелью, так и с окном приложения.В зависимости от создаваемой диалоговой панели (модальной или немодальной) будут использованыразличие функции создания (DialogBox (+ прочие) или CreateDialog (+ прочие)), уничтожения (EndDialog илиDestroyWindow), также будут различия в цикле обработки сообщения (см.
вопросы 15, 16).Сообщения для органов управленияОрганы управления посылают в функцию диалога сообщение WM_COMMAND. В своюочередь, приложение может посылать различные сообщения ОУ, вызывая функцию SendMessage.Для посылки сообщения также удобно использовать функцию SendDlgItemMessage (нетребуется указывать идентификаторы окна органов управления):LRESULT WINAPI SendDlgItemMessage(HWND hdlg, int idDlgItem, UINT uMsg, WPARAM wParam, LPARAMlParam);hdlg – идентификатор диалоговой панели, idDlgItem – идентификатор органа управления,uMsg – номер сообщения, wParam, lParam – параметры сообщения.Для выполнения некоторых часто использующихся операций с органами управления впрограммном интерфейсе Windows определены специальные функции (свои для конкретногооргана управления).