Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru


Visual C++.NET. MFC. Уроки с сайта http://progs.biz

Рассылка № 63

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

Полные версии уроков (с картинками) можно найти по адресам:
Урок 16. Создаем контекстное меню.

Т. Арчер, Э. Уайтчепел. Visual C++ .NET. Библия пользователя.

Заказать на Озоне

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Новости сайта progs.biz
Краткое описание всех новых уроков и материалов на сайте progs.biz. Основные направления - языки программирования (Visual C++, Visual Basic.NET, C#, Delphi, Java), WEB-дизайн (HTML, PHP, PhotoShop, SSI), базы данных, обзоры книг по программированию и новых программ.

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 появится окно для сохранения файла.

Наверх

PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка .NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru
Copyright Алексеев Игорь, 2002-2004
Copyright сайт progs.biz, 2002-2004
Распространение материалов без разрешения владельцев авторских прав запрещено.


BannerDrive.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное