Как перехватить системное меню над EditBox'ом?
От: PolA  
Дата: 29.01.05 09:02
Оценка:
Есть задача — к стандартному меню, возикающему над EditBox'ом пр нажатии пр. кнопки мыши (копировать/вставить/вырезать и пр.) нужно добавить несколько своих пунктов.

Как это сделать в программе, использующей MFC, чтобы при этом остались старые пункты вместе со своими обработчиками (т.е. чтобы функции вставить/копировать/и пр. продолжали работать наравне с моими доп. функциями)?

29.01.05 13:21: Перенесено из 'C/C++'
29.01.05 13:52: Перенесено модератором из 'WIN API' — Odi$$ey
Re: Как перехватить системное меню над EditBox'ом?
От: Кодт Россия  
Дата: 29.01.05 09:56
Оценка:
Здравствуйте, PolA, Вы писали:

PA>Есть задача — к стандартному меню, возикающему над EditBox'ом пр нажатии пр. кнопки мыши (копировать/вставить/вырезать и пр.) нужно добавить несколько своих пунктов.


PA>Как это сделать в программе, использующей MFC, чтобы при этом остались старые пункты вместе со своими обработчиками (т.е. чтобы функции вставить/копировать/и пр. продолжали работать наравне с моими доп. функциями)?


Специально для этого есть форумы MFC (www.rsdn.ru/forum/?group=mfc) и WinAPI (www.rsdn.ru/forum/?group=winapi)
Перекуём баги на фичи!
Re: Как перехватить системное меню над EditBox'ом?
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 29.01.05 10:09
Оценка: 20 (1)
Здравствуйте, PolA, Вы писали:

PA>Есть задача — к стандартному меню, возикающему над EditBox'ом пр нажатии пр. кнопки мыши (копировать/вставить/вырезать и пр.) нужно добавить несколько своих пунктов.


Сабклассируйте EDIT, отловите сообщение WM_INITMENUPOPUP и в его обработчике (после выполнения стандартных действий) добавьте свои элементы. Ну а обрабатывать их нужно будет в ON_COMMAND().

P.S.
Николай прав, это лучше в форуме "MFC" спрашивать. Будем бомбить...
[ posted via RSDN@Home 1.1.4 beta 4 r309, accompanied by Motorhead — Lost In The Ozone ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[2]: Как перехватить системное меню над EditBox'ом?
От: Кодт Россия  
Дата: 29.01.05 10:27
Оценка: 9 (1)
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Сабклассируйте EDIT, отловите сообщение WM_INITMENUPOPUP и в его обработчике (после выполнения стандартных действий) добавьте свои элементы. Ну а обрабатывать их нужно будет в ON_COMMAND().


Во! Точно, вспомнил как это сообщение называется.

Для сабклассирования достаточно, как и полагается в MFC, завести наследника от CEdit, и перекрыть уже существующий метод CWnd::OnInitMenuPopup(); далее, в диалоге подцепить к контролу переменную этого класса, и всё готово.

Кстати, подобным образом dialog-based приложения (которые рожает визард) подвёрстывают всякую ерунду в системное меню главного окна.
Перекуём баги на фичи!
Re[3]: Как перехватить системное меню над EditBox'ом?
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 29.01.05 10:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Во! Точно, вспомнил как это сообщение называется.


Ученики мне рассказывали, что китайские программисты знают ВыньАПИ наизусть — сообщения, названия функций, списки параметров, поля структур... Правда это или нет, не знаю — но с тех пор люблю говорить "я вам не китайская девочка, я в MSDN посмотрю..."

К>Для сабклассирования достаточно, как и полагается в MFC, завести наследника от CEdit, и перекрыть уже существующий метод CWnd::OnInitMenuPopup(); далее, в диалоге подцепить к контролу переменную этого класса, и всё готово.


Угу, excellent. Я просто предпочинаю объяснять "на АПИ" ибо расширяет. Подцепляние осуществляется при помощи DDX_Control(), можно еще посмотреть в сторону CWnd::SubclassWindow(), если надо что-то "глубокое" делать.
[ posted via RSDN@Home 1.1.4 beta 4 r309, accompanied by Motorhead — Sex & Death ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
P.S. - зря вы это в "Win API" снесли... в "MFC" ему самое ме
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 29.01.05 10:38
Оценка:
[ posted via RSDN@Home 1.1.4 beta 4 r309, accompanied by Motorhead — Bad Woman ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.