
- •43. Работа с таймером. Функции создания и удаления таймеров. Синхронные сообщения таймера.
- •Void callback TimerProc(hwnd hwnd, _uint iMsg, _uint iTimerId, dword dwTime)
- •Void winapi GetLocalTime(
- •44. Обработка сообщений от таймера в оконной процедуре приложения. Организация процедуры обратного вызова для обработки сообщений от таймера.
- •45. Кнопки pushbutton defpushbutton и их назначение. Создание кнопок в окне приложения, сообщения от кнопок.
- •46. Кнопки флажки checkbox, autocheckbox, 3state, auto3state их назначение. Создание кнопок в окне приложения, сообщения от кнопок. Управление кнопками со стороны приложения.
- •47. Кнопки-переключатели radiobutton, autoradiobutton их назначение. Создание кнопок в окне приложения, сообщения от кнопок. Управление кнопками со стороны приложения.
- •48. Работа с кнопками в окне приложений. Управление фокусом кнопок.
- •48,А. Функции для изменения состояния дочерних окон на примере кнопок.
- •48,Б. Функции, которые определяют связи между идентификатором дочернего окна, хэнделом дочернего окна и хэнделом родительского окна.
- •48,В. Функции для изменения текста в дочерних окнах на примере кнопок.
- •49. Статические дочерние окна. Их назначение и создание в окне приложения. Стили статических окон.
- •50. Использование статических окон как устройств вівода текста или картинок.
- •51. Введение новой оконной процедуры для управления фокусом дочерних окон управления и изменения функций дочерних окон.
- •52. Класс редактирования(edit). Основные стили класса, назначение и использование окон редактирования.
- •53. Создание окон редактирования в окне приложения. Основные функции окна редактирования. Сообщения окна родительскому окну и сообщения посылаемые окну редактирования.
- •54. Класс окна списка(list-box). Основные стили класса, назначение и использование окна списка диалога.
- •55.Сообщения окна списка(listbox) и сообщения, посылаемые окну списка.
- •55А.Сообщения lb_dir ,атрибуты для выбора файлов, каталогов и логических дисков.
- •56.Файл ресурсов. Описание и назначение. Компилятор ресурсов. Использование файла ресурсов в проекте приложения.
- •57.Описание в файле ресурсов иконок, курсоров и битовых образов. Имена ресурсов и стандартные типы ресурсов. Функции доступа к ресурсам.
- •58.Ресурсы-символьные строки, их назначения и описание в файле ресурсов. Функции доступа к ресурсам-строкам.
- •59.Имена ресурсов, использование макроса makeintresource().
- •60.Структура главного меню. Описание меню в файле ресурсов.
- •61. Сообщение от меню. Идентификаторы действия меню. Индексы элементов Popup menu
- •61,А. Использование символа ‘&’ в описаниях пунктов меню
- •61,Б. Действия, которые приводят к получению и потере фокуса для меню
- •61,В. Основные признаки пунктов меню, порядок изменения состояния пунктов меню
- •61,Г. Способы подключения меню в программу
- •61,Д. Основные сообщения меню, их структура и назначение.
- •61,Е. Отличия сообщения wm_command для меню и кнопок.
- •61,Ж. Отличия сообщения wm_command от сообщения wm_syscommand
- •62. Всплывающее меню. Отличия в описании всплывающего меню от описания главного меню в файле ресурсов
- •62,А Порядок обращению к всплывающему меню
- •63. Системное меню. Особенности, описание и использование системного меню
- •63,Б. Использование системного меню для построения меню пользователя
- •64. Клавиши акселератора. Назначение и описание в файле ресурсов. Обработка сообщений от клавиш акселератора в цикле обработки сообщений.
- •64,А. Отличия сообщения wm_command для меню и акселераторов
- •64,Б. Зачем нужны акселераторы, если имеются различные виды сообщений от клавиатуры?
- •64,В. Дополнения в цикле чтения сообщений при использовании акселераторов.
- •64,Г. Порядок загрузки акселераторов в приложение.
- •65. Окна диалога и их назначение. Модальные и немодальные окна. Описание окон диалога в файле ресурсов.
- •Icon „About1“
- •66. Создание модального окна диалога. Диалоговая процедура, её назначение, и применение.
- •67. Немодальное окно диалога. Функция создания окна. Обработка сообщений от немодальных окон диалога. Цикл обработки сообщений при наличии немодальных окон диалога.
- •68. Описание дочерних окон управления в окнах диалога. Инструкции сокращенного и общего описания дочерних окон управления (в составе окна диалога) в файле ресурсов.
- •69. Основные правила интерфейса клавиатуры для дочерних окон управления, описанных в диалоговом окне.
- •70. Окна Сообщений. Стили и флаги окон. Использование окон сообщений в режиме модального и немодального окна.
65. Окна диалога и их назначение. Модальные и немодальные окна. Описание окон диалога в файле ресурсов.
Наиболее часто окна диалога используются для получения от пользователя дополнительной информации сверх той, которую может обеспечить меню. Бывают модальные и немодальные диалоги.
При выводе на экран модального диалога пользователь не может переключаться между окном диалога и другими окнами программы. Пользователь должен сначала закончить работу с окном диалога, что обычно делается путем щелчка на кнопке типа ОК или Cancel. Также существуют системные модальные окна, которые в отличии от обычных не позволяют переключаться на другие программы.
Немодальный диалог после своего создания получает фокус и позволяет также отобрать параметры для программы. В любой момент можно перевести фокус с немодального диалога на другое окно приложения. Немодальный диалог обычно имеет кнопку «Применить», по которой главное окно получает WM_COMMAND и забирает из диалога выбранные параметры. По внешнему виду это обычное окно
AboutBox DIALOG 20,20,160,80
STYLE WS_POPUP | WS_DLGFRAME
{
CTEXT „About1“ -1, 0, 12, 160, 8
Icon „About1“
CTEXT „About Box Demo Program“ -1, 8, 8, 0, 0
CTEXT “© Charles Petzold, 1996” -1, 0, 48, 160, 8
DEFPUSHBUTTON “OK” IDOK, 64, 60, 32, 14, WS_GROUP
}
Первая строка – имя (AboutBox). Далее следует ключевое слово DIALOG и 4 числа – первые 2 это координаты х и у верхнего левого угла окна диалога относительно рабочей области родительского окна при вызове окна диалога программой. Вторые 2 числа – ширина и высота окна диалога.
Координаты задаются не в пикселях. Х =1/4 средней ширины символа, Y = 1/8 высоты символа.
Внутри фигурных скобок определяются те дочерние окна элементов управления, которые появятся в окне диалога. В нашем окне диалога используются дочерние окна элементов управления трех типов: CTEXT (текст, выровненный по центру), ICON (значок) и DEFPUSHBUTTON (кнопка, выбираемая по умолчанию). Форматинструкций описания следующий:
control-type "text" id, xPos, yPos, xWidth, yHeight [, iStyle]
Значение iStyle в конце инструкции не является обязательным; оно задает дополнительные стили окна, используя идентификаторы, заданные в заголовочных файлах Windows.
Если с идентификатором WS_GROUP – определяет начало группы, WS_TABSTOP – элемент, который получает фокус по кругу клавишей TAB.
66. Создание модального окна диалога. Диалоговая процедура, её назначение, и применение.
Диалоговая процедура обрабатывает сообщения, получаемые окном диалога. Она похожа на оконную процедуру, но не является ею. Оконная процедура вызывает вашу диалоговую процедуру, передавая ей многие сообщения, которые получает сама.
BOOL CALLBACKAboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam,LPARAM lParam)
{…}
Параметры такие же как и у оконной процедуры, можно даже вместо hDlg применять hWnd.
Первым сообщением, которое получает окно диалога является WM_INITDIALOG. Это сообщение посылается только процедурам диалога. Если процедура возвращает TRUE, то Windows помещает фокус на ввода на первое дочернее окно элемента , имеющее стиль WS_TABSTOP. Можно использовать SetFocus для установки фокуса, тогда функция возвращает False.
Сообщения для модального окна диалога не проходят через очередь сообщений программы .
66. Создание модального окна диалога. Диалоговая процедура, её назначение, и применение.
Модальные окна — это окна, при появлени которых на экране запрещается доступ к родительскому окну.
Для создания модальных диалоговых окон существует функция
function DialogBoxParam(hInstance: HINST; lpTemplateName: PChar; hWndParent: HWND; lpDialogFunc: TFNDlgProc; dwInitParam: LPARAM): Integer
Диалоговая процедура или процедура диалога программы обрабатывает сообщения, получаемые окном диалога. Хотя она очень сильно напоминает оконную процедуру, это не настоящая оконная процедура. Оконная процедура окна диалога находится в Windows. Эта оконная процедура вызывает вашу диалоговую процедуру, передавая ей многие из сообщений, которые получает сама. Параметры этой функции те же, что и параметры обычной оконной процедуры; как и оконная процедура,
процедура диалога должна быть определена как функция типа CALLBACK. Хотя в качестве описателя окна диалога использовался описатель hDlg, вместо него можно при желании использовать hwnd. процедура диалогового окна возвращает значение типа BOOL . Если оконная процедура не обрабатывает какое-то сообщение, она вызывает DefWindowProc; процедура диалога, если она не обрабатывает сообщение, возвращает FALSE (0), а если обрабатывает, то TRUE . Процедура диалога не обрабатывает сообщения WM_PAINT и WM_DESTROY. Процедура диалога не получит сообщения WM_CREATE; вместо этого она выполняет инициализацию при обработке специального сообщения WM_INITDIALOG. Единственным оставшимся сообщением, которое обрабатывает процедура окна диалога, является WM_COMMAND. Это то сообщение, которое элемент управления кнопка посылает своему родительскому окну тогда, когда либо на ней производится щелчок мышью, либо нажата клавиша <Spacebar> (пробел) и кнопка имеет фокус ввода.
66а. Порядок установки начального фокуса в диалоговом окне.
Когда диалоговое окно открыто фокус обычно установлен на первом элементе окна. Внутренний фокус визуально состоит из прямоугольника, стороны которого нарисованы пунктиром. Одним из способов управления диалоговым окном является клавиша Tab, с помощью которой можно перемещать фокус от элемента к элементу и между закладками. Когда на нужном элементе установлен фокус, можно изменять параметры этого элемента. Для обратного перемещения фокуса существует комбинация клавиш Shift+Tab. Обычно фокус перемещается по элементам систематично от левого верхнего края к правому нижнему.
66б. Порядок передачи фокуса между дочерними окнами в окне диалога.
Сообщение WM_INITDIALOG является первым сообщением, которое получает процедура диалога. Это сообщение посылается только процедурам диалога. Если процедура диалога возвращает TRUE, то Windows помещает фокус ввода на первое дочернее окно элемента управления, которое имеет стиль WS_TABSTOP. С другой стороны, при обработке сообщения WM_INITDIALOG процедура диалога может использовать функцию SetFocus для того, чтобы установить фокус на одно из дочерних окон управления окна диалога, и тогда она должна вернуть значение FALSE.
66в. Различия в назначении кнопок PUSHBUTTON и DEFPUSHBUTTON в окне диалога.
BS_PUSHBUTTON - создает обычную кнопку, которая посылает
сообщение WM_COMMAND окну-владельцу, когда пользователь
выбирает её.
BS_DEFPUSHBUTTON - создаёт кнопку по умолчанию
( вокруг неё будет тонкая темная рамка ). Если
пользователь нажмет ENTER, то запустится обработчик
нажатия на эту кнопку.
66г. Использование клавиатуры для выбора параметров в окне диалога.
Win32 API автоматически предоставляет интерфейс клавиатуры для всех модальных диалоговых окон. Она не дает этот интерфейс для немодальных блоков диалога, если прикладная программа не вызвала функцию IsDialogMessage, чтобы фильтровать сообщения в ее главном цикле сообщений. Это означает, что прикладная программа должна передать сообщение в IsDialogMessage немедленно после извлечения сообщения из очереди сообщений. Функция обрабатывает сообщения, если они для диалогового окна и возвращает значение отличное от нуля, чтобы указать, что сообщение было обработано и его невозможно было передать в функции TranslateMessage или DispatchMessage.
ALT+mnemonic - Перемещает фокус ввода данных в первый элемент управления (имеющий стиль WS_TABSTOP) после статического элемента управления, содержащего данный символ.
DOWN - Перемещает фокус ввода данных в следующий элемент управления в группе.
ENTER - Посылает сообщение WM_COMMAND процедуре диалогового окна. В параметре wParam установлен IDOK или идентификатор элемента управления командной кнопки заданной по умолчанию.
ESC - Посылает сообщение WM_COMMAND процедуре диалогового окна. В параметре wParam установлен флажок IDCANCEL.
LEFT - Перемещает фокус ввода данных в предыдущий элемент управления в группе.
mnemonic - Перемещает фокус ввода данных в первый элемент управления (имеющий стиль WS_TABSTOP) после статического элемента управления, содержащего данный символ.
RIGHT - Перемещает фокус ввода данных в следующий элемент управления в группе.
SHIFT+TAB - Перемещает фокус ввода в предыдущий элемент управления, который имеет стиль WS_TABSTOP.
TAB - Перемещает фокус ввода в следующий элемент управления, который имеет стиль WS_TABSTOP.
UP - Перемещает фокус ввода данных в предыдущий элемент управления в группе.