GetCl i entRect(Wi ndowF romOC(hdc).&r); int yC - r.bottom/2; int xC - r.right/2; int 1 - r.bottom/2; Alfa +« dAlfa;
if (Erase) Rectangle(hdc.0.0.r.right.r.bottom);
//Позже мы увидим, что стирание предыдущего изображения можно убрать
//и переложить эту функцию на операционную систему.
MoveToEx(hdc.xC-1*cos(Alfa).yC-1*s i n(Alfa).NULL);
Li neTo(hdc.xC+1*cos(Alfa).yC+1*s i n(Alfa));
}
Для периодического запуска функции вращения отрезка можно использовать сообщения программного таймера WM_TIMER. Эти сообщения приходят в оконную процедуру после пуска таймера функцией при помощи вызова функции SetTimer(HWND hWnd, int Nun, int Tau, NULL).
Первый параметр функции определяет окно, второй идентифицирует таймер, так как можно вызовами функции SetTimer( ) создать несколько таймеров, а третий параметр задает период поступления сообщений в миллисекундах. События WM_TIMER перестанут поступать при уничтожении таймера функцией Ki 11 Ti mer ( HWND hWnd, i nt Num).
Приоритет сообщений WM_TIMER еще ниже, чем у WM_PAINT. Как и WM_PAINT, сообщения WM_TIMER хранятся в виде отдельного флага, поэтому в очереди не может быть двух или более таких сообщений одновременно.
Теперь следует вставить в оконную процедуру запуск таймера по щелчку левой кнопки мыши, останов по щелчку правой кнопкой мыши и вызов рисования по приходу сообщения WM_TIMER, как это показано в листинге 3.7.
Листинг 3.7
void RotateLine(HDC. Erase);
// это прототип, так как сама функция описана в другом файле LRESULT API ENTRY InputWndProc (HWND hWnd. UINT message.
WPARAM wParam.LPARAM lParam)
{switch (message) {HDC dc;
case WM_DESTROY:
продолжение
Элементы компьютерной графики
Листинг 3.7 {продолжение)
KillTimerC hWnd. 1 ); PostQuitMessage(O); break;
case WMJIMER:
de -GetDC(hWnd);
RotateLine(dc.l):
ReleaseDC(hWnd.dc); break;
case WM_LBUTTONUP:
SetTi mer(hWnd.1.40.NULL); break:
case WM_RBUTT0ND0WN:
KillTimerC hWnd. 1 ); break; }
}
Теперь при запуске проекта (он находится в папке RotateLine) после щелчка левой кнопкой в окне будет отображаться вращающийся отрезок и изменение размеров окна не будет приводить к исчезновению изображения.