C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 16. Создаем контекстное меню / Уроки C++ .NET / Visual C++ .NET

Visual C++.NET
Урок 16. Создаем контекстное меню

На этом занятии мы с вами создадим контекстное меню. Для этого существует два подхода. Первый, который мы и рассмотрим на этом уроке - это создание меню непосрдаственно в обработчике для правой кнопки мыши. Второй, который мы рассмотрим на следующем уроке, предполагает предварительное создание меню в редакторе меню.

Итак, создайте с помощью мастера SDI приложение. Пусть для определенности оно называется MFCTest. Добавьте обработчик для правой кнопки мыши в класс Вида CMFCTestView. В этот обработчик добавьте следующий код:

void CMFCTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CMenu menu;
    // Создаем контекстное меню.
    menu.CreatePopupMenu();
    // Добавляем пункты меню.
    menu.AppendMenu(MF_STRING, ID_FILE_NEW, "New");    
    menu.AppendMenu(MF_STRING, ID_FILE_SAVE, "Save");
    // Приводим координаты.
    ClientToScreen(&point);
    // Показываем контекстное меню.
    menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
    CView::OnRButtonDown(nFlags, point);
}

Код достаточно ясен из комментариев. Некорого пояснения требует, наверное, только метод AppendMenu. Он добавляет к меню очередной пункт и имеет следующие параметры: первый определяет состоянение добавляемого пункта меню. Значение MF_STRING опеределяет, что пункт меню представляет из себя строку (без иконок). Второй параметр определяет идентификатор команды, которая будет выполнятся при выборе пользователем этого пункта меню. Его можно посмотреть, например, в неком существующем пункте меню (свойство ID). Мы тут выбрали идентификаторы команд, добавленных мастером (ID_FILE_NEW и ID_FILE_SAVE). И, наконец, последний параметр - это та надпись, которая и будет в нашем пункте меню.

Потом мы показываем наше контекстное меню путем вызова метода TrackPopupMenu. Первый параметр у него определяет, как меню будет показано относительно точки, в которой мы щелкнули мышкой (значение TPM_LEFTALIGN оперделяет, что меню будет показываться слева). Второй и третий - место, в котором наше контекстное меню появится. Обратите внимание, что это место - относительно экрана, так что перед этим мы должны превратить координаты относительно окна в экранные. Это мы делаем путем вызова метода ClientToScreen. Последний, четвертый параметр задает родительское окно для нашего контекстного меню. Тут мы пришем this, так как мы добавили наш обработчик в класс вида CMFCTestView.

Компилируем программу. По правой кнопке мыши должно появится контекстное меню. Приблизительно такое:

Контекстное меню

Пункты у него уже будут работать - например, при выборе пункта Save появится окно для сохранения файла.