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


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


Посмотрите справку по концепции наследования от CObject, чтобы понять, как связаны макросы с функцией IsKindOf, затем уберите макросы и внесите изменения в интерфейс класса так, чтобы он был:

class 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) ;

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



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