Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS