- •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. Окна Сообщений. Стили и флаги окон. Использование окон сообщений в режиме модального и немодального окна.
Void callback TimerProc(hwnd hwnd, _uint iMsg, _uint iTimerId, dword dwTime)
{
[обработка сообщений WM_TIMER]
}
Входной параметр hwnd — это описатель окна, задаваемый при вызове функции SetTimer. Windows будет посылать функции TimerProc только сообщения WM_TIMER, следовательно параметр iMsg всегда будет равен WM_TIMER. Значение iTimerID — это идентификатор таймера, а значение dwTime — системное время.
При использовании функции обратного вызова для обработки сообщений WM_TIMER, четвертый параметр функции SetTimer заменяется адресом функции обратного вызова:
SetTimer(hwnd, iTimerID, iMsecInterval,(TIMERPROC) TimerProc);
Третий способ установки таймера напоминает второй, за исключением того, что параметр hwnd функции SetTimer устанавливается в NULL, а второй параметр (обычно идентификатор таймера) игнорируется. Функция возвращает ID таймера:
iTimerID = SetTimer(NULL, 0, wMsecInterval,(TIMERPROC) TimerProc);
Возвращаемое функцией SetTimer значение iTimerID будет равно NULL, если таймер недоступен.
Первый параметр функции KillTimer (обычно описатель окна) также должен быть равен NULL. Идентификатор таймера должен быть равен значению, возвращаемому функцией SetTimer.
KillTimer(NULL, iTimerID);
Параметр hwnd, передаваемый в TimerProc, также должен быть равен NULL.
Такой метод установки таймера используется редко. Он удобен, если в программе в разное время делается много вызовов функции SetTimer, и при этом не запоминаются те таймерне идентификаторы, которые уже использовались.
Что написать о синхронних сообщениях тамера не знаю. Может подойдет то, что выделено жырным курсивом? И вообще. Жирным шрифтом в 43 вопросе выделил то, что я бы реально аписал в билете!
Void winapi GetLocalTime(
_Out_ LPSYSTEMTIME lpSystemTime
); - извлекает текущее дату и время в структуру:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
BOOL WINAPI SetSystemTime(
_In_ const SYSTEMTIME *lpSystemTime
); - устанавливает дату и время из структуры _SYSTEMTIME.
44. Обработка сообщений от таймера в оконной процедуре приложения. Организация процедуры обратного вызова для обработки сообщений от таймера.
В main:
SetTimer(hwnd, ID_TIMER, 1000,(TIMERPROC) TimerProc)…
WndProc:
case WM_DESTROY :
KillTimer(hwnd, ID_TIMER);…
И далее процедура обработки WM_TIMER
VOID CALLBACK TimerProc(HWND hwnd, UINT iMsg, UINT iTimerID, DWORD dwTime)
{
static BOOL fFlipFlop = FALSE;
HBRUSH hBrush;
HDC hdc;
RECT rc;
MessageBeep(0);
fFlipFlop = !fFlipFlop;
GetClientRect(hwnd, &rc);
hdc = GetDC(hwnd);
hBrush = CreateSolidBrush(fFlipFlop ? RGB(255,0,0) : RGB(0,0,255));
FillRect(hdc, &rc, hBrush);
ReleaseDC(hwnd, hdc);
DeleteObject(hBrush);
}
45. Кнопки pushbutton defpushbutton и их назначение. Создание кнопок в окне приложения, сообщения от кнопок.
Различие PUSHBUTTON и DEFPUSHBUTTON:
У DEFPUSHBUTTON толстая внешняя линия, и на этом различия заканчиваются, если речь идет только о создании дочерних окон управления. Так понимаю то, что мы делали в 12 лабе.
Если говорить о создании окон диалога, то кнопки имеют существенные отличия не считая жирних внешних линий. DEFPUSHBUTTON получает фокус ввода автоматически, даже если она не была выбрана. В этом случае она может сработать при нажатии клавиши «пробел». Следует учесть, что в этом случае кнопка принимает на себя все сообщения от клавиатуры, поэтому фокус у нее надо забирать.
Создание кнопок :
При вызове функции CreateWindow используются следующие параметры:
Имя класса "button"
Текст окна button[i].text
Стиль окна WS_CHILD | WS_VISIBLE | СТИЛЬ_КНОПКИ
Положение по х cxChar
Положение по у cyChar * (1 + 2 * i)
Ширина 20 * cxChar
Высота 7 * cyChar / 4
Родительское окно hwnd
Идентификатор дочернего окна (HMENU)i
Описатель экземпляра ((LPCREATESTRUCT) lParam) -> hInstance
Дополнительные параметры NULL
Параметр "имя класса" — его предопределенное имя. При задании стиля окна используются стили WS_CHILD,
WS_VISIBLE и один из десяти стилей кнопок (BS_PUSHBUTTON, BS_DEFPUSHBUTTON и т. д.), которые
определены в структуре button. Параметр "текст окна" (который у обычного окна появляется в строке заголовка) —
это текст, который будет выводиться вместе с каждой кнопкой. Здесь просто использовался текст,
идентифицирующий стиль кнопки.
Параметры "положение по х" и "положение по у" показывают положение верхнего левого угла дочернего окна
относительно верхнего левого угла рабочей области родительского окна. Параметры "ширина" и "высота" задают
ширину и высоту каждого дочернего окна.
Сообщения от кнопок:
Передаются в старшем слове wParam.
Имеют следующие значения:
BN_CLICKED 0
BN_PAINT 1
BN_HILITE 2
BN_UNHILITE 3
BN_DISABLE 4
BN_DOUBLECLICKED 5
Коды уведомления от 1 до 5 — это коды для кнопок устаревшего стиля BS_USERBUTTON, поэтому вы столкнетесь только с кодами BN_CLICKED
Стили нажимных кнопок, рекомендуемые размеров кнопок.
BS_PUSHBUTTON и BS_DEFPUSHBUTTON
Порядок работы с кнопками с использованием мыши и клавиатуры
Реагируют на пробел, надо забирать фокус, так как они принимают на себя и остальные клавиши, но не обрабатывают их.
Сообщения, которые используются для работы с нажимными кнопками.
Вы можете имитировать нажатие кнопки, посылая окну сообщение WM_SETSTATE. Следующий оператор приводит к нажатию кнопки:
SendMessage(hwndButton, BM_SETSTATE, 1, 0);
Следующий вызов заставляет кнопку вернуться к своему нормальному состоянию:
SendMessage(hwndButton, BM_SETSTATE, 0, 0);
Описатель окна hwndButton является возвращаемым значением функции CreateWindow
