Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание контекстного меню и окна свойств, как создать 
V
    Опции темы
BFS
Дата 24.10.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Подскажите, как сделать контекстное меню, в VC++, желательно в 8-ом (VisualStudio 2005);
значит MDI- MFC приложение, есть окно представления; (графический редактор); и чтобы в зависимости от места правого щелчка мышью показывались различные меню (предопределённое); каким образом формируются пункты этого меню, различные комбинации, вложения(подменю); каким образом связываются со стандартным меню(чтобы при выборе пункта в контекстном, автоматически отмечался соответственный пункт в осносвном меню); ещё очень интересует возможность создания в таком меню подменю "Свойства", и чтобы после выбора "Свойства", отображалось окно свойств данной фигуры(на которой находится указатель мыши);

Буду невероятно признателен за любую помощь!
Спасибо.
PM MAIL   Вверх
zkv
Дата 24.10.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



поиск не работает? А внизу ссылки "А здесь смотрели?" для кого?
Цитата(BFS @  24.10.2007,  10:44 Найти цитируемый пост)
и чтобы в зависимости от места правого щелчка мышью показывались различные меню (предопределённое);

WM_CONTEXTMENU или WM_RBUTTONUP изучай
Цитата(BFS @  24.10.2007,  10:44 Найти цитируемый пост)
каким образом формируются пункты этого меню, различные комбинации, вложения(подменю);

можно рисовать в редакторе ресурсов, потом выбирать нужное, можно формировать динамически - изучай CMenu
Цитата(BFS @  24.10.2007,  10:44 Найти цитируемый пост)
каким образом связываются со стандартным меню(чтобы при выборе пункта в контекстном, автоматически отмечался соответственный пункт в осносвном меню); 

пункты меню с одинаковыми ID работают как один, те все изменения одного автоматически отображаются на другом, каждому ID соответствовать один обработчик должен, независимо в скольких менюшках он используется
Цитата(BFS @  24.10.2007,  10:44 Найти цитируемый пост)
ещё очень интересует возможность создания в таком меню подменю "Свойства", и чтобы после выбора "Свойства", отображалось окно свойств данной фигуры(на которой находится указатель мыши);

это своими силами: рисуешь диалог, при клике вычисляешь в какую фигуру попали, загружаешь данные в диалог, думодалишь, применяешь изменения.
PM MAIL   Вверх
BFS
Дата 25.10.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



добавил такую функцию:

void CLastView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CMenu MenuOne;
    
    MenuOne.LoadMenuW(IDR_MENUPOPUP);
    POINT cursor_pos;
    ::GetCursorPos (&cursor_pos);
    MenuOne.GetSubMenu (0)->TrackPopupMenu( nFlags, cursor_pos.x, cursor_pos.y,this);

    CView::OnRButtonDown(nFlags, point);
}

нарисовал меню, всё работает; но как там поступить с окном свойств..? У меня уже это меню выскакивает как меню фигуры, тоесть допустим что MenuOne вызывается ТОЛЬКО тогда, когда мы кликнули на фигуре. В этом меню есть пункт Options. Должно появиться окошко, там можно будет менять толщину линий данной фигуры, её цвет, ..., будет кнопка "применить". Можно поподробнее о процессе создания такого окошка (формы, диалога), и о том, какие функции при выборе Options должны его вызывать; как инициализируется объект этого окна... тоесть, всё, чтобы эта штука работала! Не сочтите за издевательство, пожалуйста, неукого спросить,.. да что уж тут, больше некогда, а не неукого... Огромное спасибо тому, кто откликнется!
PM MAIL   Вверх
Earnest
Дата 25.10.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Контектсное меню кошернее показывать не по WM_RBUTTONDOWN, а по WM_CONTEXTMENU.

Что касается окна свойств, можно придумать массу вариантов. Например, такой:

- перед отображением контекстного меню находим и запоминаем в переменной класса CLastView тыкнутый объект.
- предполагается, что в контекстном меню присутствует пункт Options с ид-ром ID_OBJECT_OPTIONS
- в карту CLastView добавляем обработчик команды ID_OBJECT_OPTIONS, который анализирует тип запомненного объекта и вызывает соответствующий диалог; 
- диалоги, естественно, должны быть прописаны заранее. Лучше, если все они будут наследниками базового класса, скажем, CObjPropDlg, и все объекты тоже составляют иерархию с базовым классом CMyObj. Базовый диалог принимает в качестве параметра ссылку или указатель на базовый объект; конкретный диалог должен быть в курсе, как выбранные в нем параметры к этому объекту применить.



--------------------
...
PM   Вверх
BFS
Дата 26.10.2007, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Ещё один вопрос назрел по этой теме:
  Я создал класс Диалога, вручную ничего не писал - там вижла(vs2005) всё сама сделала. Я только добавил необходимые переменные в этот класс. Только вот обработчики событий - нажатий кнопок на форме совсем не хотят обрабатываться в C*View. Мне, кстати, тоже создаёт их вижла, я выбираю клас C*View, и вправду - там появляются функции-обработчики этих кнопок, даже всё заносится в MessagesMap! НО! эти функции так и не вызываются никогда! потом делаю по-другому: создаю ещё кнопку, её уже для обработки в созданном классе MyDialog, и там управление передаётся нормально!!? Так в чём причина, если я проделываю одни и те же действия, но для разных классв, а функция не вызывается.. зачем тогда предусмотрено это?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.