Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
43-70_otvety_na_teplogo.docx
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
87.53 Кб
Скачать

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);

  1. Третий способ установки таймера напоминает второй, за исключением того, что параметр 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]