Рисование с помощью мыши
Вы можете разрешить пользователю рисовать линии с помощью мыши, нарисовав процедуру окна во время обработки сообщения WM_MOUSEMOVE . Система отправляет WM_MOUSEMOVE сообщение в процедуру окна всякий раз, когда пользователь перемещает курсор в окне. Для рисования линий процедура окна может получить контекст отображаемого устройства и нарисовать линию в окне между текущей и предыдущей позицией курсора.
В следующем примере процедура окна подготавливается к рисованию, когда пользователь нажимает и удерживает левую кнопку мыши (отправляя сообщение WM_LBUTTONDOWN ). Когда пользователь перемещает курсор в пределах окна, процедура окна получает ряд WM_MOUSEMOVE сообщений. Для каждого сообщения процедура окна рисует линию, соединяющую предыдущую и текущую позицию. Чтобы нарисовать линию, процедура использует GetDC для получения контекста отображаемого устройства; после завершения рисования и перед возвратом из сообщения процедура использует функцию ReleaseDC для освобождения контекста отображаемого устройства. Как только пользователь отпустит кнопку мыши, процедура окна снимает флаг, и рисование останавливается (что отправляет сообщение WM_LBUTTONUP ).
BOOL fDraw = FALSE;
POINT ptPrevious;
.
.
.
case WM_LBUTTONDOWN:
fDraw = TRUE;
ptPrevious.x = LOWORD(lParam);
ptPrevious.y = HIWORD(lParam);
return 0L;
case WM_LBUTTONUP:
if (fDraw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
fDraw = FALSE;
return 0L;
case WM_MOUSEMOVE:
if (fDraw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, ptPrevious.x = LOWORD(lParam),
ptPrevious.y = HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
return 0L;
Приложение, которое включает рисование, как в этом примере, обычно записывает точки или линии, чтобы линии можно было перерисовывать при каждом обновлении окна. Приложения для рисования часто используют контекст устройства памяти и связанное растровое изображение для хранения линий, нарисованных с помощью мыши.