Иллюстрированный самоучитель по Visual Studio.Net


Окна с геометрией данных - часть 3


dc.SetWindowOrg (m_pDoc->m_szDoc.cx/2, m_pDoc->m_szDoc.cy/2), dc.SetWindowExt(m_pDoc->m_szDoc);

//====== Узнаем текущие размеры окна

GetClientRect(&m_Rect);

int w = m_Rect.Width (), h = m_Rect.Height ();

//====== Настраиваем аппаратное окно

dc.SetViewportOrg (w/2, h/2);

dc.SetViewportExt (w, -h);

//=== Выбираем в контейнере нужный полигон и просим

//=== его изобразить себя в подготовленном контексте m_pDoc->m_Shapes[m_ID].Draw(Sdc);

}

void CWndGeom: :OnLButtonDown (UINT nFlags, CPoint point)

{

//====== Изменяем дежурный полигон

m_pDoc->m_Poly = m_pDoc->m_Shapes [m_ID] ;

//== Если не было CDrawView, то создаем его

if (m_pDoc->MakeView() )

return;

//=== Если он был, то находим его и делаем активным

CView *pView = m_pDoc->GetView (RUNTIME_CLASS (CDrawView) ;

{

(CMDIChildWnd*)pView->GetParentFrame ()

} ->MDIActivate () ;

//====== Перерисовка с учетом изменений

pView->Invalidate ( ) ;

Все «мышиные» сообщения сопровождаются параметрами, которые информируют нас о том, где и как произошло событие. Первый параметр есть набор битов, указывающих, какие виртуальные клавиши были нажаты в момент события. Например, если nFlags содержит бит с именем MK_CONTROL (символическая константа), то это означает, что в момент нажатия левой кнопки мыши также была нажата клавиша Ctrl. Второй параметр содержит координаты (х, у) местоположения курсора в момент события. Они заданы относительно верхнего левого угла клиентской области окна:

void CWndGeom: lOnMouseMove (UINT nFlags, CPoint point)

{

//====== Если указатель мыши в пределах окна,

if (m_Rect.Pt!nRect (point))

{

//====== то захватываем мышь, выбираем перо

//====== и рисуем обрамляющий прямоугольник

SetCapture () ;

CClientDC dc(this) ;

CPen pen (PS_SOLID, 4, RGB (192, 192, 255));

dc.SelectObject (&pen);

dc.MoveTo(m_Rect.left+4, m_Rect . top+4) ;

dc.LineTo (m_Rect.right-4, m_Rect . top+4) ;

dc.LineTo (m_Rect.right-4, m_Rect .bottom-4) ;

dc.LineTo (m_Rect.left+4, m_Rect .bottom-4) ;

dc.LineTo (m_Rect.left+4 , m_Rect . top+4) ;

}

else

{

ReleaseCapture () ;

// Освобождаем мышь Invalidated;

// Прямоугольник будет стерт

}

}

Так как в коде функции OnLButtonDown содержится обращение к объекту класса CDrawView, то необходимо в список директив препроцессора текущего файла (RightView.cpp) вставить еще одну: #include "DrawView.h".




Начало  Назад  Вперед