Учебник по Visual C++ .Net


Окна с геометрией данных Характерный


CWndGeom : public CWnd

{

public:

CTreeDoc *m_pDoc;

// Адрес документа (для удобства)

CRightview *m_pView;

// Адрес родительского окна

int m_ID;

// Индекс окна документа в массиве CRect m_Rect;

// Координаты в правом окне

//====== Удобный для нас конструктор

CWndGeom (CRightview *p, int id);

~CWndGeom();

protected: DECLARE_MESSAGE_MAP()

};

В файле реализации класса измените коды конструктора, как показано ниже. Затем с помощью Studio.Net введите в класс реакции на следующие сообщения: WM_PAINT, WM_LBUTTONDOWN и WM_MOUSEMOVE. Цель этих действий такова. При наведении курсора мыши на одно из окон, управляемых классом CWndGeom, оно должно проявить признаки готовности быть выбранным. Для этого рисуем в нем обрамляющий прямоугольник, который исчезает при выходе указателя мыши за пределы окна. Эта функциональность реализуется за счет пары функций

SetCapture - ReleaseCapture. Метод CWnd: : SetCapture захватывает текущее окно как адресат для последующих сообщений мыши независимо от позиции курсора. Поэтому при перемещении курсора мыши можно выйти из пределов клиентской области окна и все равно получить и обработать сообщение им_ MOUSEMOVE. На этом свойстве окна и построен алгоритм его подсветки. Функция ReleaseCapture «освобождает мышь», то есть вновь восстанавливает обычный порядок обработки мышиных сообщений. Мы вызываем функцию после того, как обнаружен факт выхода за пределы окна и снята подсветка, то есть стерт обрамляющий прямоугольник:

CWndGeom::CWndGeom(CRightView *p, int id)

{

//====== Запоминаем адрес родительского окна

m_pView = р;

//====== Запоминаем адрес документа

m_pDoc = p->GetDocument();

//====== и индекс окна в массиве

m_ID = id;

}

void CWndGeom::OnPaint()

{

CPaintDC dc(this);

dc.SetMapMode(MM_ISOTROPIC) ;

//====== Настраиваем логическое окно

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

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

GetClientRect(&m_Rect);




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