Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.12.240] |
|
Сообщ.
#1
,
|
|
|
у меня есть CEdit, в котором можно писать только числа
при этом пришлось убрать возможность вставки туда текста с помощью Ctrl+V, но в менюшке, что открывается при нажатии правой кнопки на эдите, остался итем Paste есть способ с минимальными телодвижениями его убрать? можно даже все меню, если 1 итем убирать слишком сложно |
Сообщ.
#2
,
|
|
|
Цитата Alek86 @ есть способ с минимальными телодвижениями его убрать? можно даже все меню, если 1 итем убирать слишком сложно М.б. перехватывать сообщение WM_CONTEXTMENU? |
Сообщ.
#3
,
|
|
|
AZote, это, как понимаю, для того, чтобы не показывать всю менюшку?
|
Сообщ.
#4
,
|
|
|
Цитата Alek86 @ AZote, это, как понимаю, для того, чтобы не показывать всю менюшку? Ага. Ну это радикальный метод. Добавлено В принципе, это единственный способ, скорее всего. Ведь иначе бы пришлось доставать системное меню (если оно существует, а не создается в процессе обработки сообщения WM_CONTEXTMENU дефолтной оконной процедурой текстового поля) и править вручную состояния пунктов, что непременно бы сказалось на всех остальных текстовых полях программы и не только. Так что, выход один: создать свое меню в редакторе ресурсов, ловить сообщение WM_CONTEXTMENU, отображая свое меню и обрабатывая команды от него. |
Сообщ.
#5
,
|
|
|
ясно, спасибо
|
Сообщ.
#6
,
|
|
|
Хм, по мне так подойдет для этой цели WM_INITMENUPOPUP. Например убрать пункт меню по позиции или идентификатору через RemoveMenu или DeleteMenu. Handle меню EDIT вероятно можно получить через GetMenu, а там уже и до GetSubMenu недалеко.
|
Сообщ.
#7
,
|
|
|
Цитата Maksim V. @ Handle меню EDIT вероятно можно получить через GetMenu, а там уже и до GetSubMenu недалеко. А не возвращает ли GetMenu для текстового поля его идентификатор? |
Сообщ.
#8
,
|
|
|
AZote
Хм, что имеется ввиду под текстовым полем? Если известна позиция пункта меню, то вполне можно узнать через GetMenuItemID или GetMenuItemInfo. Хотя я не уверен что вернется именню тот самый хэндл всплывающего меню. Можно посмотреть реализацию в исходном коде Windows 2000, вроде там должен быть код эдита. |
Сообщ.
#9
,
|
|
|
Maksim V., позиция, как понимаю, заранее не известна
|
Сообщ.
#10
,
|
|
|
Alek86
Ну как вариант засабклассить и уже в WM_PASTE проверять символы на соответствие, зато будет возможность вставлять числа, если все нормально, вызовем CallWindowProc иначе брякаем, то же самое и с WM_CHAR. Порылся в коде эдита, там делают например так: EnableMenuItem(hMenu, WM_CUT, MF_BYCOMMAND | MFS_GRAYED); То есть здесь идентификатор пункта уже WM_CUT, значит удаляем таким же макаром уже WM_PASTE, должно работать. Ну а меню грузят из hmodUser, дальше не смотрел константы чего там значит точно, полез редактором ресурсов в user32.dll и там менюшка с порядковым номером 1 действительно для эдита, оттуда и можно взять идентификаторы. |
Сообщ.
#11
,
|
|
|
Цитата Maksim V. @ Хм, что имеется ввиду под текстовым полем? Edit control |