На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Drawing with the Mouse



You can permit the user to draw lines with the mouse by having your window procedure draw while processing the WM_MOUSEMOVE message. Windows sends the WM_MOUSEMOVE message to the window procedure whenever the user moves the cursor within the window. To draw lines, the window procedure can retrieve a display DC and draw a line in the window between the current and previous cursor positions.

In the following example, the window procedure prepares for drawing when the user presses and holds the left mouse button (sending the WM_LBUTTONDOWN message). As the user moves the cursor within the window, the window procedure receives a series of WM_MOUSEMOVE messages. For each message, the window procedure draws a line connecting the previous position and the current position. To draw the line, the procedure uses GetDC to retrieve a display DC; then, as soon as drawing is complete and before returning from the message, the procedure uses the ReleaseDC function to release the display DC. As soon as the user releases the mouse button, the window procedure clears the flag, and the drawing stops (which sends the WM_LBUTTONUP message).


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;



An application that enables drawing, as in this example, typically records either the points or lines so that the lines can be redrawn whenever the window is updated. Drawing applications often use a memory DC and an associated bitmap to store lines that were drawn by using a mouse.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Рисуя с помощью Мыши



Вы можете разрешить потребителя, чтобы делать линиями с мышью иметь ваша процедура окна делает при обработке сообщения WM_MOUSEMOVE. Окно посылает сообщение WM_MOUSEMOVE в процедуру окна всякий раз, когда потребитель перемещает курсор в пределах окна. Чтобы делать линиями, процедура окна может извлечь показ DC и делать линией в окне между текущими и предшествующими позициями курсора.

В следующем примере, процедура окна готовится к чертежу когда потребитель нажимает и держит левую кнопку мыши (посылка сообщения WM_LBUTTONDOWN). Так как потребитель перемещает курсор в пределах окна, процедура окна получает серию сообщений WM_MOUSEMOVE. Для каждого сообщения, процедура окна делает линией, соединяющей предшествующую позицию и текущая позиция. Чтобы разграничивать, процедура использует GetDC, чтобы извлекать показ DC; затем, как только чертеж будет завершен и перед возвратом из сообщения, процедура использует функцию ReleaseDC, чтобы выпускать показ DC. Как только потребитель выпустит кнопку мыши, процедура окна очищает флаг, и чертеж остановок (который посылает сообщение WM_LBUTTONUP).


BOOL fDraw = ЛОЖЬ;
УКАЖИТЕ ptPrevious;

.
.
.

случай WM_LBUTTONDOWN: fDraw = ИСТИНА;
ptPrevious.x = LOWORD(lParam);
ptPrevious.y = HIWORD(lParam);
возвращайте 0L;

случай WM_LBUTTONUP: если (fDraw) { hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, НЕДЕЙСТВИТЕЛЬНЫЙ);
LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
fDraw = ЛОЖЬ;
возвращайте 0L;

случай WM_MOUSEMOVE:

если (fDraw) { hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, НЕДЕЙСТВИТЕЛЬНЫЙ);
LineTo(hdc, ptPrevious.x = LOWORD(lParam), ptPrevious.y = HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
возвращайте 0L;



Приложение, которое приспосабливается чертеж, как в этом примере, обычно записях или точки или линии чтобы линии могут быть redrawn всякий раз, когда окно скорректировано. Рисуя часто использование приложений память DC и связанное побитовое отображение, чтобы хранить линии, которые были сделаны использованием мыши.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz