Чтение онлайн

на главную - закладки

Жанры

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

// Operations

public:

// Overrides

 //{{AFX_VIRTUAL(CMultiView)

public:

 virtual void OnDraw(CDC* pDC);

 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

protected:

 virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

 virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

 virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

 //}}AFX_VIRTUAL

// Implementation

public:

 virtual ~CMultiView;

#ifdef _DEBUG

 virtual void AssertValid const;

 virtual void Dump(CDumpContext& dc) const;

#endif

protected:

 //{{AFX_MSG(CMultiView)

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP

};

Остальные

классы приложения остаются без изменения.

Таблица сообщений класса CMultiView

При добавлении контекстного меню к окну класса CMultiView, в таблицу сообщений класса CMultiView добавляется новая макрокоманда ON_WM_CONTEXTMENU:

//////////////////////////////////////////////////////////////

// Таблица сообщений класса CMultiView

// Объекты класса CMultiView создаются динамически

IMPLEMENT_DYNCREATE(CMultiView, CView)

// Таблица сообщений класса CMultiView. В нее добавлена

// макрокоманда ON_WM_CONTEXTMENU

BEGIN_MESSAGE_MAP(CMultiView, CView)

 ON_WM_CONTEXTMENU

 //{{AFX_MSG_MAP(CMultiView)

 //}}AFX_MSG_MAP

 // Стандартные команды

 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

 ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

 ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)

END_MESSAGE_MAP

Метод OnContextMenu класса CMultiView

Когда пользователь нажимает правую кнопку мыши в окне, макрокоманда ON_WM_CONTEXTMENU вызывает метод-обработчик OnContextMenu из класса этого окна. Методу OnContextMenu передаются два параметра:

afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos);

Параметр pWnd

содержит указатель на объект класса CWnd. Он представляет окно, в котором находился указатель мыши, когда была нажата правая кнопка мыши. Это может быть окно класса к которому принадлежит таблица сообщений или его дочернее окно.

Параметр pos, представляющий объект класса CPoint, содержит координаты указателя мыши, зафиксированные в момент нажатия правой кнопки мыши.

Реализация метода OnContextMenu добавляется в файле MultiView.cpp:

//////////////////////////////////////////////////////////////

// Метод OnContextMenu класса CMultiView

// CG: Метод OnContextMenu добавлен компонентом Pop-up Menu

void CMultiView::OnContextMenu(CWnd*, CPoint point) {

 // Объект menu будет представлять контекстное меню

 CMenu menu;

 // Загружаем меню CG_IDR_POPUP_MULTI_VIEW

 VERIFY(menu.LoadMenu(CG_IDR_POPUP_MULTI_VIEW));

 // Получаем указатель на всплывающее меню

 CMenu* pPopup = menu.GetSubMenu(0);

 ASSERT(pPopup != NULL);

 // Получаем указатель на объект CWnd, представляющий окно

 // для которого надо отобразить контекстное меню

 CWnd* pWndPopupOwner = this;

 while (pWndPopupOwner->GetStyle & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent;

 // Отображаем контекстное меню

 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);

}

Для вывода контекстного меню на экран используется метод TrackPopupMenu, входящий в класс CMenu. Контекстное меню можно открыть в любом месте экрана. Вне зависимости от расположения меню, все командные сообщения от него передаются одному определенному окну.

Параметры метода TrackPopupMenu задают расположение контекстного меню и выбирают для него окно, в которое будут передаваться командные сообщения:

BOOL TrackPopupMenu(UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = 0);

Параметр nFlags представляет собой комбинацию атрибутов. Они определяют, как будет отображаться меню и какая кнопка мыши используется для выбора строк из этого меню.

Если в качестве nFlags указан атрибут TPM_CENTERALIGN, то контекстное меню отображается по центру относительно координаты, указанной параметром x. Если в параметре nFlags установлен атрибут TPM_LEFTALIGN, то параметр x определяет координату левой стороны меню, а если установлен атрибут TPM_RIGHTALIGN — правой.

Поделиться:
Популярные книги

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Аргумент барона Бронина 4

Ковальчук Олег Валентинович
4. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 4

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Измена. Право на обман

Арская Арина
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на обман

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Жаба с кошельком

Донцова Дарья
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Жаба с кошельком

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Академия чаросвет. Тень

Ярошинская Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Академия чаросвет. Тень

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4