
- •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. Окна Сообщений. Стили и флаги окон. Использование окон сообщений в режиме модального и немодального окна.
69. Основные правила интерфейса клавиатуры для дочерних окон управления, описанных в диалоговом окне.
Кнопки OK и Cancel
В шаблоне окна диалога файла описания ресурсов ABOUT2.RC кнопка OK имеет идентификатор IDOK (определенный в заголовочных файлах Windows как 1) а кнопка Cancel имеет идентификатор IDCANCEL (определенный как 2). При этом кнопкой по умолчанию является кнопка OK:
DEFPUSHBUTTON "OK" IDOK, 20, 168, 40, 14, WS_GROUP
PUSHBUTTON "Cancel"IDCANCEL, 80, 168, 40, 14, WS_GROUP
Такое соглашение для кнопок OK и Cancel в окнах диалога вполне обычно; наличие выбираемой по умолчанию кнопки OK помогает работе с интерфейсом клавиатуры. Обычно окно диалога закрывается с помощью либо щелчка мыши на одной из этих кнопок, либо нажатия клавиши <Spacebar>, когда нужная кнопка имеет фокус ввода. Кроме этого оконная процедура окна диалога генерирует сообщение WM_COMMAND при нажатии клавиши <Enter>, независимо от того, какое из окон элементов управления имеет фокус ввода. Младшее слово параметра wParam соответствует значению идентификатора выбираемой по умолчанию кнопки окна диалога до тех пор, пока другая кнопка не получит фокус ввода. В этом случае младшее слово параметра wParam получает значение идентификатора той кнопки, которая имеет фокус ввода. Если в диалоговом окне нет кнопки, выбираемой по умолчанию, то Windows посылает диалоговой процедуре сообщение WM_COMMAND с младшим словом параметра wParam равным IDOK. А при нажатии клавиши <Esc> или <Ctrl>+<Break>, Windows посылает процедуре окна диалога сообщение WM_COMMAND с младшим словом параметра wParam равным IDCANCEL. Таким образом, нет необходимости добавлять в процедуру окна диалога отдельную логику работы с клавиатурой, поскольку те нажатия клавиш, которые обычно приводят к закрытию окна диалога, преобразуются Windows в сообщения WM_COMMAND для этих двух кнопок.
Пример: Функция AboutDlgProc, вызывая функцию EndDialog, обрабатывает эти два сообщения WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, FALSE);
return TRUE;
EndDialog – это значение передается обратно в WndProc в качестве возвращаемого значения функции DialogBox:
case IDM_ABOUT:
if(DialogBox(hInstance, "AboutBox", hwnd, AboutDlgProc))
InvalidateRect(hwnd, NULL, TRUE);
return 0;
Если функция DialogBox возвращает TRUE (т. е. ненулевое значение), что означает нажатие кнопки OK, то WndProc должна обновить рабочую область, нарисовав новую фигуру новым цветом. Эти фигура и цвет запоминаются в глобальных переменных iCurrentColor и iCurrentFigure в функции AboutDlgProc, когда она получает сообщение WM_COMMAND с младшим словом параметра wParam равным IDOK. Если функция DialogBox возвращает FALSE, то родительское окно продолжает использовать прежние значения глобальных
переменных iCurrentColor и iCurrentFigure. Величины TRUE и FALSE, как правило, используются в функции EndDialog для того, чтобы просигнализировать оконной процедуре родительского окна о том, какой из кнопок (OK или Cancel) пользователь закрывает окно диалога. Однако параметром функции EndDialog фактически является int, поэтому таким образом можно передавать гораздо больше информации, чем просто значения TRUE или FALSE.