Этот вопрос уже задавался, но ответом на него было: «Ну, каждое приложение должно поддерживать разные параметры». Тем не менее, когда вы щелкаете правой кнопкой мыши по выделенному фрагменту в блокноте, браузере, где угодно, что-то создает контекстное меню. Как приложение это делает? Почему я не могу добавить в него? Как добавить в контекстное меню выделения? Лучше отсутствие ответа, чем отсутствие ответа.
решение1
Короткий ответ: Если вы добавили новый пункт меню,программа не будет знать, что делать при нажатии на элемент.На самом деле, вам придется изменить код программы, чтобы заставить новые пункты меню что-то делать. Вот почему ответ «Это зависит от каждого приложения» является допустимым.
Windows, как и большинство других операционных систем, предоставляет набор функций для создания программ с графическим интерфейсом — некоторые из них являются частью системы («создать окно»), другие предназначены в основном для удобства («нарисовать кнопку, которую можно нажать»).
Большинство программ отображают свои меню (обычное и контекстное) с помощью этих функций — они по сути предоставляют Windows список элементов и просят отобразить его на экране в виде меню, а также информируют программу о том, что вы выбрали.
Windows не особенно заботится о том, откуда берется список элементов. Некоторые меню генерируются самой программой (например, список «Недавние файлы»); вы не можете изменить их, не переписав часть программы, которая создает список последних файлов. Другие меню, такие как «Файл» или «Правка» или «Справка» в Блокноте, создаются из «ресурса», хранящегося в .exe
самом файле, и существуют инструменты для редактирования таких ресурсов (например, для перестановки элементов меню или изменения значка программы).
Но если вы используете такой инструмент для добавления новых пунктов меню, они не будут работать, потому что программане знал бы, что делать. С каждым пунктом меню не связано никакой магии, только один номер, «идентификатор команды». Например, «Копировать», будучи распространенным во многих программах, имеет назначенный идентификатор команды 12 («IDM_COPY»), а что-то специфичное для одной программы (например, «Новая игра») может иметь 1234 или 2468 или что-то еще. Когда вы открываете контекстное меню и нажимаете «Копировать», Windows сообщает Блокноту только, что «выбран идентификатор команды 12», и Блокнот должен фактически поместить выбранный текст в буфер обмена, когда это происходит.
- Вырезать → ID 11 → Блокнот помещает текст в буфер обмена, а затем удаляет его из документа
- Копировать → ID 12 → Блокнот помещает текст в буфер обмена
- Вставить → ID 13 → Блокнот извлекает текст из буфера обмена, а затем вставляет его в документ
- Sing → ID 12 → Блокнот помещает текст в буфер обмена
- Копировать снова → ID 3456 → Блокнот ничего не делает, так как не имеет ни малейшего понятия, что должен означать ID 3456
Примечание: Вышеизложенное немного упрощено. Контекстное меню в Notepad на самом деле реализовано элементом управления "редактируемый текст", который является частью вышеупомянутых служебных функций, предоставляемых Windows. Однако главное меню полностью является частью Notepad.
Примечание: Некоторые программы, обычно те, которые можно скинировать или тематически оформить, на самом деле рисуют различные элементы управления самостоятельно – что не так уж и сложно, поскольку всплывающее меню – это просто окно без заголовка. Хотя я сам не видел код таких программ, не думаю, что детали сильно изменятся.