На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> убрать итем из меню в CEdit
    у меня есть CEdit, в котором можно писать только числа
    при этом пришлось убрать возможность вставки туда текста с помощью Ctrl+V, но в менюшке, что открывается при нажатии правой кнопки на эдите, остался итем Paste

    есть способ с минимальными телодвижениями его убрать? можно даже все меню, если 1 итем убирать слишком сложно
      Цитата Alek86 @
      есть способ с минимальными телодвижениями его убрать? можно даже все меню, если 1 итем убирать слишком сложно

      М.б. перехватывать сообщение WM_CONTEXTMENU? :)
        AZote, это, как понимаю, для того, чтобы не показывать всю менюшку?
          Цитата Alek86 @
          AZote, это, как понимаю, для того, чтобы не показывать всю менюшку?

          :yes: Ага. Ну это радикальный метод.

          Добавлено
          В принципе, это единственный способ, скорее всего. Ведь иначе бы пришлось доставать системное меню (если оно существует, а не создается в процессе обработки сообщения WM_CONTEXTMENU дефолтной оконной процедурой текстового поля) и править вручную состояния пунктов, что непременно бы сказалось на всех остальных текстовых полях программы и не только.
          Так что, выход один: создать свое меню в редакторе ресурсов, ловить сообщение WM_CONTEXTMENU, отображая свое меню и обрабатывая команды от него. :)
            ясно, спасибо
              Хм, по мне так подойдет для этой цели WM_INITMENUPOPUP. Например убрать пункт меню по позиции или идентификатору через RemoveMenu или DeleteMenu. Handle меню EDIT вероятно можно получить через GetMenu, а там уже и до GetSubMenu недалеко.
                Цитата Maksim V. @
                Handle меню EDIT вероятно можно получить через GetMenu, а там уже и до GetSubMenu недалеко.

                А не возвращает ли GetMenu для текстового поля его идентификатор?
                  AZote
                  Хм, что имеется ввиду под текстовым полем? Если известна позиция пункта меню, то вполне можно узнать через GetMenuItemID или GetMenuItemInfo. Хотя я не уверен что вернется именню тот самый хэндл всплывающего меню. Можно посмотреть реализацию в исходном коде Windows 2000, вроде там должен быть код эдита. :)
                    Maksim V., позиция, как понимаю, заранее не известна
                      Alek86
                      Ну как вариант засабклассить и уже в WM_PASTE проверять символы на соответствие, зато будет возможность вставлять числа, если все нормально, вызовем CallWindowProc иначе брякаем, то же самое и с WM_CHAR. :)
                      Порылся в коде эдита, там делают например так:
                      ExpandedWrap disabled
                        EnableMenuItem(hMenu, WM_CUT, MF_BYCOMMAND | MFS_GRAYED);

                      То есть здесь идентификатор пункта уже WM_CUT, значит удаляем таким же макаром уже WM_PASTE, должно работать. :)
                      Ну а меню грузят из hmodUser, дальше не смотрел константы чего там значит точно, полез редактором ресурсов в user32.dll и там менюшка с порядковым номером 1 действительно для эдита, оттуда и можно взять идентификаторы.
                        Цитата Maksim V. @
                        Хм, что имеется ввиду под текстовым полем?

                        Edit control
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0285 ]   [ 16 queries used ]   [ Generated: 27.04.24, 14:34 GMT ]