![]() |
|
|
![]()
|
|
| BFS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
Подскажите, как сделать контекстное меню, в VC++, желательно в 8-ом (VisualStudio 2005);
значит MDI- MFC приложение, есть окно представления; (графический редактор); и чтобы в зависимости от места правого щелчка мышью показывались различные меню (предопределённое); каким образом формируются пункты этого меню, различные комбинации, вложения(подменю); каким образом связываются со стандартным меню(чтобы при выборе пункта в контекстном, автоматически отмечался соответственный пункт в осносвном меню); ещё очень интересует возможность создания в таком меню подменю "Свойства", и чтобы после выбора "Свойства", отображалось окно свойств данной фигуры(на которой находится указатель мыши); Буду невероятно признателен за любую помощь! Спасибо. |
|||
|
||||
| zkv |
|
||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
поиск не работает? А внизу ссылки "А здесь смотрели?" для кого?
WM_CONTEXTMENU или WM_RBUTTONUP изучай
можно рисовать в редакторе ресурсов, потом выбирать нужное, можно формировать динамически - изучай CMenu
пункты меню с одинаковыми ID работают как один, те все изменения одного автоматически отображаются на другом, каждому ID соответствовать один обработчик должен, независимо в скольких менюшках он используется это своими силами: рисуешь диалог, при клике вычисляешь в какую фигуру попали, загружаешь данные в диалог, думодалишь, применяешь изменения. |
||||||
|
|||||||
| BFS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 должны его вызывать; как инициализируется объект этого окна... тоесть, всё, чтобы эта штука работала! Не сочтите за издевательство, пожалуйста, неукого спросить,.. да что уж тут, больше некогда, а не неукого... Огромное спасибо тому, кто откликнется! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Контектсное меню кошернее показывать не по WM_RBUTTONDOWN, а по WM_CONTEXTMENU.
Что касается окна свойств, можно придумать массу вариантов. Например, такой: - перед отображением контекстного меню находим и запоминаем в переменной класса CLastView тыкнутый объект. - предполагается, что в контекстном меню присутствует пункт Options с ид-ром ID_OBJECT_OPTIONS - в карту CLastView добавляем обработчик команды ID_OBJECT_OPTIONS, который анализирует тип запомненного объекта и вызывает соответствующий диалог; - диалоги, естественно, должны быть прописаны заранее. Лучше, если все они будут наследниками базового класса, скажем, CObjPropDlg, и все объекты тоже составляют иерархию с базовым классом CMyObj. Базовый диалог принимает в качестве параметра ссылку или указатель на базовый объект; конкретный диалог должен быть в курсе, как выбранные в нем параметры к этому объекту применить. -------------------- ... |
|||
|
||||
| BFS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
Ещё один вопрос назрел по этой теме:
Я создал класс Диалога, вручную ничего не писал - там вижла(vs2005) всё сама сделала. Я только добавил необходимые переменные в этот класс. Только вот обработчики событий - нажатий кнопок на форме совсем не хотят обрабатываться в C*View. Мне, кстати, тоже создаёт их вижла, я выбираю клас C*View, и вправду - там появляются функции-обработчики этих кнопок, даже всё заносится в MessagesMap! НО! эти функции так и не вызываются никогда! потом делаю по-другому: создаю ещё кнопку, её уже для обработки в созданном классе MyDialog, и там управление передаётся нормально!!? Так в чём причина, если я проделываю одни и те же действия, но для разных классв, а функция не вызывается.. зачем тогда предусмотрено это? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |