Ответы 4_1
На этой странице ответы на вопросы главы 4.
Сообщения от мыши можно связать с такими сообщениями:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_RBUTTONDBCLK
WM_MLBUTTONDOWN
WM_MLBUTTONUP
WM_MLBUTTONDBCLK
WM_XBUTTONDOWN
WM_XLBUTTONUP
WM_XLBUTTONDBCLK
WM_MOUSEMOVE
WM_MOUSEWHEEL
Используя флаг MK_LBUTTON,можно наложить маску на флаги, передаваемые функции OnMouseMove :
if((nFlags & MK_LBUTTON) == MK_LBUTTON)
Следует в функции, обрабатывающей событие OnSetCursor возвратить значение true,чтобы предотвратить вызов основной (системной) функции OnSetCursor.
Далее создайте функцию обрабатывающую сообщение о событии WM_RBUTTONDOWN и добавьте в нее следующий код:
void CMouseDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
m_iPrevX = point.x;
m_iPrevY = point.y;
CDialog::OnRButtonDown(nFlags, point);
Дополните функцию OnMouseMove следующим кодом:
if((nFlags & MK_LBUTTON) == MK_LBUTTON)
//использовать новое перо
//провести линию от предыдущей точки до текущей точки
if((nFlags & MK_RBUTTON) == MK_RBUTTON)
//использовать новое перо
//провести линию от предыдущей точки до текущей точки
//сохранить текущую точку в качестве предыдущей точки
//восстановить предыдущее перо
void CMouseDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if((nFlags & MK_LBUTTON) == MK_LBUTTON||
(nFlags & MK_RBUTTON) == MK_RBUTTON))
{
CClientDC dc(this);
CPen* pPrevPen = 0;
{
CPen lpen(PS_SOLID, 14, RGB(255, 0, 0));
pPrevPen = dc.SelectObject(&lpen);
dc.MoveTo(m_iPrevX,m_iPrevY);
dc.LineTo(point.x,point.y);
{
CPen lpen(PS_SOLID, 14, RGB(0, 0, 255));
pPrevPen = dc.SelectObject(&lpen);
dc.MoveTo(m_iPrevX,m_iPrevY);
dc.LineTo(point.x,point.y);
m_iPrevX = point.x;
m_iPrevY = point.y;
dc.SelectObject(pPrevPen);
CDialog::OnMouseMove(nFlags,point);
Назад |
Начало урока |
Вверх |
Содержание