Как удалить самое бесполезное приложение на Android, из-за которого подключаются платные услуги оператора
Как ни странно, даже на новом смартфоне по умолчанию установлено несколько десятков приложений. Это не только партнерские программы и бесполезные игры, но и софт, который в прямом смысле выкачивает из нас деньги. Причем он есть на каждом смартфоне с SIM-картой. То есть даже сейчас, читая этот текст, вы рискуете потерять деньги, к примеру, случайно оформив платную подписку оператора. Пора разобраться, почему так происходит и определить, какое приложение является главной причиной возникновения проблемы.

Из-за этого приложения многие люди ежедневно теряют деньги
Что такое меню SIM-карты
Вставив симку в телефон, вы можете заметить на главном экране своего смартфона (а иногда в папке «Инструменты») меню СИМ-карты. Как правило, оно называется так же, как и ваш оператор сотовой связи, и может быть представлено в двух экземплярах по количеству установленных SIM.
⚡ Подпишись на Androidinsider в Дзене, чтобы получать новости из мира Андроид первым
СИМ меню представляет из себя небольшое приложение, которое прекрасно работает без подключения к интернету. Через него можно подключить платные подписки оператора. Например, СМС-рассылку с анекдотами или гороскопами.

Меню SIM-карты является бесполезным, да и работает оно не всегда
Вещь, откровенно говоря, бесполезная. А на билайне при нажатии на любой из пунктов меню на номер поступает СМС-сообщение, предлагающее подключить опцию при помощи личного кабинета. То есть через СИМ меню телефона сделать это нельзя.
Казалось бы, пускай живет себе это приложение. Ну кому оно мешает? Однако именно эта программа становится главной причиной того, что у вас пропадают деньги с телефона. Как такое вообще возможно? Сейчас поймете.
Платные подписки операторов
Вы наверняка замечали на экране своего смартфона уведомления оператора, предлагающие подключить ту или иную опцию. Обычно они представлены в виде информационного сообщения, которое сопровождается кнопками «ОК» и «Отмена». Нажимая первую, вы подключаете платную услугу. А выбирая вариант «Отмена», отказываетесь от предложения. В любом случае совсем скоро оповещение снова появится на экране.

Уже догадались, кто присылает эти уведомления?
Причина появления рекламного сообщения оператора — меню SIM-карты. Это приложение отправляет вам навязчивые уведомления, из-за которых впоследствии с лицевого счета списываются деньги, а вам приходится довольствоваться анекдотами, гороскопами и прочей ерундой.
Как отключить уведомления от оператора
О том, как проверить платные услуги, мы рассказывали в отдельном материале. В рамках этого текста будем говорить только о способах избавления от рекламных уведомлений. И самый простой способ, позволяющий это сделать — отключить рекламный сервис. На билайне он называется Хамелеон, а на Tele2 — Теле-тема. Для его отключения нужно ввести USSD-команду через номеронабиратель и нажать кнопку вызова:
- МегаФон — *808*0#;
- МТС — *111*1212*2#;
- билайн — *110*20#;
- Tele2 — *152*0#.
Будучи абонентом билайна, я отключал Хамелеон, но предложения оформить подписку на совершенно ненужные сервисы все равно продолжали появляться на экране смартфона. Происходило это ровно до тех пор, пока я не узнал, что причина их возникновения — меню SIM-карты. Так давайте же узнаем, как можно ограничить его работу.
❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате
Как отключить меню SIM-карты
Можно предположить, что проблема решается в два счета отключением уведомлений на Андроид. Однако в настройках СИМ меню эта возможность заблокирована. Поэтому встроенными средствами удается лишь принудительно закрыть приложение:
- Откройте настройки смартфона.
- Перейдите в раздел «Приложения».
- Выберите «Меню SIM-карты».
- Нажмите кнопку «Отключить» или «Закрыть».

Реклама исчезнет, но вскоре снова появится
Все! Уведомления оператора приходить перестанут. Но ровно до тех пор, пока вы не перезапустите смартфон. Поэтому оптимальным способом решения проблемы является полное и безвозвратное удаление СИМ меню.
Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс
Как удалить меню SIM-карты
Что будет, если удалить меню СИМ-карты? Ничего критичного. По понятным причинам вы потеряете к нему доступ, однако все услуги связи продолжат работать. Увы, стандартными средства избавиться от этого бесполезного приложения нельзя. Вам придется узнать, что такое ADB, и воспользоваться этой инструкцией:
- Скачайте архив ADB на компьютер и распакуйте его содержимое в папку, которая отображается при запуске командной строки.
- На смартфоне включите отладку по USB, предварительно активировав меню для разработчиков.

Нужно включить все опции, связанные с отладкой

При первом подключении в режиме отладки может потребоваться нажатие кнопки подтверждения, которая появится на экране смартфона
На нашем сайте есть более подробная инструкция, которая поможет удалить системное приложение на телефоне. Обращаю ваше внимание на то, что СИМ меню может иметь другое имя пакета (обычно используется «сom.android.stk»), поэтому рекомендую уточнить его название через приложение App Inspector. Также не исключено, что после переустановки SIM-карты меню появится вновь. Поэтому будьте готовы в случае чего повторить выполнение изложенных выше действий.

Теги
- Новичкам в Android
- Приложения для Андроид
- Финансы
Наши соцсети
Новости, статьи и анонсы публикаций
UBit Menu Office что это?

Всем привет. Поговорим сегодня о такой штуке как UBit Menu Office, отвечу честно, что это такое я не знаю, но скорее всего связано с офисом от Microsoft. Значит поискал я в интернете, именно про UBit Menu Office я почти ничего не нашел. Но вот поискав по слову UBitMenu, я узнал, что UBitMenu это такая штука, которая добавляет классическое меню из Office 2003 в Office 2007/2010. Это я читаю тут на одном сайте, не совсем понятно о каком меню идет речь. Но еще написано, что стандартное меню никуда не исчезает, просто в него добавляется дополнительный пункт Меню
Так, еще раз, какой вывод? UBitMenu это маленькая программа, которая добавляет меню из Office 2003 в Office 2007/2010. Так что если вы привыкли к старому офису, то это меню думаю вам понравится.
Так что думаю понятно что означает UBit Menu Office? Думаю понятно. Может эта программка идет в виде компонента при установке офиса. Еще у вас может быть такое как Office Tab, это тоже полезная штука, она нужна чтобы переключатся между документами при помощи вкладок, ну как в браузере.
Мне стало интересно и я еще решил поискать картинки по поводу UBitMenu. Ну и вот нашел как выглядит это меню, смотрите:

Точно не уверен, но вроде это именно то меню, которое добавляет утилита UBitMenu. Ну а вот еще один пример, гляньте:

Так, а вот я себе недавно ставил офис, можно сказать что даже офис-пакет, ибо ставилось оно долго.. И вот мне интересно, есть ли у меня эта штука UBitMenu? Я зажал вместе кнопки Win + E, далее выбрал системный диск, потом в правом верхнем углу в текстовое поле вставил UBitMenu и начал ждать:

Искалось долго и я думал что уже ничего не найдется, ну чуть ли не уверен был в этом.. а потом бац и нашлось вот три файла и одна папка, в имени которых упоминается UBitMenu, гляньте:

Как видим, тут есть три файла, это: UBitMenu04RU.ppam (вроде имеет отношение к PowerPoint), UBitMenu04RU.dotx (документ Word, я его открыл там внутри пусто), UbitMenu04RU.xlam (это файл подключаемого модуля или это плагин с поддержкой макросов). Еще есть просто папка UBitMenu, внутри два файла это unins000.dat (не знаю что) и unins000.exe (видимо для удаления):

Так что если хотите удалить UBitMenu, то можете попробовать запустить unins000.exe..
Кстати сама папка располагается вот здесь:
Только там где Дима, то это название моей учетной записи, у вас она будет называться по-своему.
Так ребята, кажется мы выяснили что такое UBitMenu, вы согласны? Это относится к офису от Microsoft и нужно чтобы из старой версии офиса 2003 поставить меню в новую версию 2007 года, или 2010.. Вот и все, как видите — все просто. А теперь позвольте пожелать вам удачи и позитивного настроения, всем пока!
Pokki Start Menu что это за программа и нужна ли она?

Всем привет Pokki Start Menu это такая программа, которая исправляет главный глюк Windows 8 — отсутствие меню Пуск. Его просто нет такого, к которому так привыкли пользователи, при том что оно было еще в самых старых версиях Windows! Хотели сделать как лучше, думали что пользователи так просто откажутся от меню Пуск! Но не тут то было, многие разработчики подсуетились и создали свои программы для возвращения меню Пуск. Хорошо, что хотя бы в Windows 10 вернули все обратно
Но тут интересный момент, вот вы может думаете, откуда взялась вообще эта программа Pokki Start Menu?
Так вот, одна компания, а именно SweetLabs заключила договор с мировым производителем Lenovo, чтобы на их ноутбуках под управлением Windows 8, уже шла установленная программа Pokki Start Menu. Это позволит юзерам не думать о проблеме с Пуском, а Lenovo таким завоевала доверие пользователей.
Кстати не такие уж и плохие у них ноуты и цены при этом доступные
Pokki Start Menu вообще изначально не предназначалась для того, чтобы вернуть меню Пуск, это была просто хорошей программкой для быстрого запуска программ с рабочего стола. Это потом уже, кода появилась проблема с отсутствием Пуск, то они добавили возможность его вернуть
Теперь немного рассмотрим это меню от программы Pokki Start Menu, после того как ее установили, в левом углу появится что-то типа кнопки меню Пуск:

Если нажать на эту кнопку, то покажется вот такое меню, вполне удобное со спокойным дизайном:

В меню также можно искать что-то, и может это даже удобнее сделано, чем в Windows 7:

Также вы можете и выйти из Windows или включить комп:

А вот список всех программ:

В меню также есть и Панель управления, можно сразу запустить то, что нужно:

В настройках Pokki Start Menu можно изменить тему на темную:

В итоге будет такое меню:

В общем что можно сказать? Программа Pokki Start Menu свою функцию выполняет хорошо, меню Пуск может и не такое прям как в Windows, но это не означает что оно неудобное. Есть поиск, настройки, удобные значки
Надеюсь, что у меня получилось обьяснить что это за программа Pokki Start Menu. Нужна ли вам эта программа, это уже решать только вам, если у вас Windows 8, то я так понимаю что нужна, ибо с таким меню удобнее, чем с плитками на весь экран.
Сведения о меню
Меню — это список элементов, указывающих параметры или группы параметров (подменю) для приложения. Если щелкнуть пункт меню, откроется подменю или приложение выполняет команду. В этом разделе содержатся сведения по следующим темам:
- Строки меню и меню
- Контекстные меню
- Меню окна
- Идентификатор справки
- Стандартный интерфейс клавиатуры
- Клавиши доступа к меню
- Сочетания клавиш меню
- Ресурсы шаблона меню
- Шаблон меню в памяти
- Дескрипторы меню
- Функции создания меню
- Отображение меню
- Меню оконных классов
- Командные элементы и элементы, открывающие подменю
- Идентификатор элемента меню
- Позиция элемента меню
- Программный доступ к пунктам меню
- Элементы меню по умолчанию
- Пункты меню «Выбранные» и «Очистить»
- Пункты меню «Включено», «Серый» и «Отключено»
- Выделенные пункты меню
- Элементы меню, нарисованные владельцем
- Разделители элементов меню и разрывы строк
Строки меню и меню
Меню упорядочено в иерархии. На верхнем уровне иерархии находится строка меню; содержит список меню, которые, в свою очередь, могут содержать подменю. Строка меню иногда называется меню верхнего уровня, а меню и подменю также называются всплывающим меню.
Элемент меню может выполнить команду или открыть подменю. Элемент, выполняющий команду, называется командным элементом или командой.
Элемент в строке меню почти всегда открывает меню. Строки меню редко содержат командные элементы. Меню, открытое из строки меню, выпадает из строки меню и иногда называется раскрывающимся меню. При отображении раскрывающегося меню оно присоединяется к строке меню. Пункт меню в строке меню, который открывает раскрывающееся меню, также называется именем меню.
Имена меню в строке меню представляют main категорий команд, которые предоставляет приложение. При выборе имени меню в строке меню обычно открывается меню, элементы меню которого соответствуют командам в категории. Например, строка меню может содержать имя меню Файл , которое при выборе пользователем активирует меню с такими пунктами меню, как Создать, Открыть и Сохранить. Чтобы получить сведения о строке меню, вызовите Метод GetMenuBarInfo.
Только перекрывающееся или всплывающее окно может содержать строку меню; дочернее окно не может содержать его. Если окно имеет заголовок окна, система размещает строку меню сразу под ней. Строка меню отображается всегда. Однако подменю не отображается, пока пользователь не выберет пункт меню, который активирует его. Дополнительные сведения о перекрывающихся и всплывающих окнах см. в разделе Типы окон.
Каждое меню должно иметь окно владельца. Система отправляет сообщения в окно владельца меню, когда пользователь выбирает меню или выбирает элемент из меню.
В этом разделе рассматриваются следующие темы.
Контекстные меню
Система также предоставляет контекстные меню. Контекстное меню не прикрепляется к строке меню; он может отображаться в любом месте экрана. Приложение обычно связывает контекстное меню с частью окна, например с клиентской областью, или с определенным объектом, например значком. По этой причине эти меню также называются контекстными меню.
Контекстное меню остается скрытым, пока пользователь не активирует его, обычно путем щелчка правой кнопкой мыши выделенного фрагмента, панели инструментов или кнопки панели задач. Меню обычно отображается в позиции курсора или курсора мыши.
Меню окна
Меню «Окно» (также известное как меню «Система » или «Управление «) — это всплывающее меню, определенное и управляемое почти исключительно операционной системой. Пользователь может открыть меню окна, щелкнув значок приложения в строке заголовка или щелкнув правой кнопкой мыши в любом месте заголовка окна.
Меню Окно предоставляет стандартный набор пунктов меню, которые пользователь может выбрать для изменения размера или положения окна или закрытия приложения. Элементы в меню окна можно добавлять, удалять и изменять, но большинство приложений используют просто стандартный набор пунктов меню. В перекрывающемся, всплывающем или дочернем окне может быть меню окна. Перекрывающееся или всплывающее окно не включает меню окна.
Когда пользователь выбирает команду в меню Окно , система отправляет сообщение WM_SYSCOMMAND в окно владельца меню. В большинстве приложений процедура окна не обрабатывает сообщения из меню окна. Вместо этого он просто передает сообщения в функцию DefWindowProc для обработки сообщения по умолчанию. Если приложение добавляет команду в меню окна, процедура окна должна обработать ее.
Приложение может использовать функцию GetSystemMenu для создания копии меню окна по умолчанию для изменения. Любое окно, которое не использует функцию GetSystemMenu для создания собственной копии меню окна, получает стандартное меню окна.
Идентификатор справки
Связанный с каждой строкой меню, меню, подменю и контекстным меню является идентификатором справки. Если пользователь нажимает клавишу F1, когда меню активно, это значение отправляется окну владельца как часть сообщения WM_HELP .
Доступ к меню с помощью клавиатуры
Система предоставляет стандартный интерфейс клавиатуры для меню. Этот интерфейс можно улучшить, предоставив мнемонические клавиши доступа и сочетания клавиш (сочетания клавиш) для пунктов меню.
В следующих разделах описывается стандартный интерфейс клавиатуры, клавиши доступа и сочетания клавиш:
- Стандартный интерфейс клавиатуры
- Клавиши доступа к меню
- Сочетания клавиш меню
Стандартный интерфейс клавиатуры
Система предназначена для работы с мышью или другим указывающим устройством или без нее. Так как система предоставляет стандартный интерфейс клавиатуры, пользователь может использовать клавиатуру для выбора пунктов меню. Для этого интерфейса клавиатуры не требуется специальный код. Приложение получает командное сообщение независимо от того, выбирает ли пользователь пункт меню с помощью клавиатуры или мыши. Стандартный интерфейс клавиатуры обрабатывает следующие нажатия клавиш.
Клавиши Действие Алфавитный символ Выбирает первый пункт меню с указанным символом в качестве ключа доступа. Если выбранный элемент вызывает меню, отображается меню и выделяется первый элемент. В противном случае выбирается пункт меню. ALT Переключение в режим строки меню и выход из него. ALT + ПРОБЕЛ Отображает меню окна. ВВОД Активирует меню и выбирает первый пункт меню, если с ним связано меню. В противном случае этот нажатие клавиши выбирает элемент так, как если бы пользователь отпустил кнопку мыши во время выбора элемента. ESC Выход из режима меню. СТРЕЛКА ВЛЕВО Переход к предыдущему элементу меню верхнего уровня. К пунктам меню верхнего уровня относятся имена меню и меню окна. Если выбранный элемент находится в меню, выбирается предыдущий столбец в меню или выбирается предыдущий пункт меню верхнего уровня. СТРЕЛКА ВПРАВО Работает как клавиша СТРЕЛКА ВЛЕВО, за исключением противоположного направления. В меню это нажатие клавиши перемещается вперед на один столбец; Если выбранный в данный момент элемент находится в крайнем правом столбце, выбирается следующее меню. СТРЕЛКА ВВЕРХ ИЛИ СТРЕЛКА ВНИЗ Активирует меню при нажатии имени меню. При нажатии в меню нажатие клавиши СТРЕЛКА ВВЕРХ выбирает предыдущий элемент; Нажатие клавиши СТРЕЛКА ВНИЗ выбирает следующий элемент. Клавиши доступа к меню
Стандартный интерфейс клавиатуры для меню можно улучшить, добавив в пункты меню клавиши доступа (мнемоники). Клавиша доступа — это подчеркнутая буква в тексте пункта меню. Если меню активно, пользователь может выбрать пункт меню, нажав клавишу, соответствующую подчеркнутой букве элемента. Пользователь делает строку меню активной, нажав клавишу ALT, чтобы выделить первый пункт в строке меню. Меню активно при отображении.
Чтобы создать клавишу доступа для элемента меню, перед любым символом в текстовой строке элемента следует использовать амперсанд. Например, текстовая строка «&Move» заставляет систему подчеркивать букву «M».
Сочетания клавиш меню
Помимо клавиши доступа, с элементом меню может быть связана клавиша быстрого доступа. Сочетание клавиш отличается от клавиши доступа, так как меню не обязательно должно быть активным для ее работы. Кроме того, клавиша доступа всегда связана с элементом меню, а клавиша быстрого доступа обычно (но не обязательно) связана с элементом меню.
Текст, определяющий сочетание клавиш, добавляется в текстовую строку пункта меню. Текст ярлыка отображается справа от имени пункта меню после обратной косой черты и символа табуляции (\t). Например, «&Close\tAlt+F4» представляет собой команду Close с сочетанием клавиш ALT+F4 в качестве сочетания клавиш и с буквой «C» в качестве клавиши доступа. Дополнительные сведения см. в разделе Сочетания клавиш.
Создание меню
Меню можно создать с помощью шаблона меню или функций создания меню. Шаблоны меню обычно определяются как ресурсы. Ресурсы шаблона меню можно загрузить явным образом или назначить в качестве меню по умолчанию для класса окна. Вы также можете динамически создавать ресурсы шаблона меню в памяти.
В следующих разделах подробно описывается создание меню.
- Ресурсы шаблона меню
- Шаблон меню в памяти
- Дескрипторы меню
- Функции создания меню
- Отображение меню
- Меню класса окна
Ресурсы шаблона меню
Большинство приложений создают меню с помощью ресурсов шаблона меню. Шаблон меню определяет меню, включая элементы в строке меню и все меню. Сведения о создании ресурса шаблона меню см. в документации по средствам разработки.
После создания ресурса шаблона меню и добавления его в исполняемый (.exe) файл приложения можно использовать функцию LoadMenu для загрузки ресурса в память. Эта функция возвращает дескриптор меню, который затем можно назначить окну с помощью функции SetMenu . Меню можно назначить любому окну, которое не является дочерним.
Реализация меню в качестве ресурсов упрощает локализацию приложения для использования в нескольких странах или регионах. Для каждого языка необходимо локализовать только файл определения ресурсов, а не исходный код приложения.
Шаблон меню в памяти
Меню можно создать на основе шаблона меню, встроенного в память во время выполнения. Например, приложение, позволяющее пользователю настраивать меню, может создать шаблон меню в памяти на основе предпочтений пользователя. Затем приложение может сохранить шаблон в файле или реестре для дальнейшего использования. Чтобы создать меню на основе шаблона в памяти, используйте функцию LoadMenuIndirect . Описание форматов шаблонов меню см. в разделе Ресурсы шаблона меню.
Стандартный шаблон меню состоит из структуры MENUITEMTEMPLATEHEADER , за которой следует одна или несколько структур MENUITEMTEMPLATE .
Шаблон расширенного меню состоит из MENUEX_TEMPLATE_HEADER структуры, за которой следует одна или несколько MENUEX_TEMPLATE_ITEM структур.
Дескрипторы меню
Система создает уникальный дескриптор для каждого меню. Дескриптор меню — это значение типа HMENU. Приложение должно указывать дескриптор меню во многих функциях меню. Вы получаете дескриптор строки меню при создании меню или загрузке ресурса меню.
Чтобы получить дескриптор в строке меню для созданного или загруженного меню, используйте функцию GetMenu . Чтобы получить дескриптор подменю, связанного с элементом меню, используйте функцию GetSubMenu или GetMenuItemInfo . Чтобы получить дескриптор в меню окна, используйте функцию GetSystemMenu .
Функции создания меню
С помощью функций создания меню можно создавать меню во время выполнения или добавлять пункты меню в существующие меню. Функцию CreateMenu можно использовать для создания пустой строки меню, а функцию CreatePopupMenu — для создания пустого меню. Вы можете сохранить определенные сведения о параметрах для меню с помощью структуры MENUINFO . Чтобы получить или получить параметры меню, используйте GetMenuInfo или SetMenuInfo. Чтобы добавить элементы в меню, используйте функцию InsertMenuItem . Старые функции AppendMenu и InsertMenu по-прежнему поддерживаются, но insertMenuItem следует использовать для новых приложений.
Отображение меню
После загрузки или создания меню его необходимо назначить окну, прежде чем система сможет отобразить его. Меню можно назначить, определив меню класса. Дополнительные сведения см. в разделе Меню класса Окна. Вы также можете назначить меню окну, указав дескриптор меню в качестве параметра hMenu функции CreateWindow или CreateWindowEx или вызвав функцию SetMenu .
Чтобы отобразить контекстное меню, используйте функцию TrackPopupMenuEx . Контекстные меню, также называемые всплывающими или контекстными меню, обычно отображаются при обработке WM_CONTEXTMENU сообщения.
Меню можно назначить любому окну, которое не является дочерним.
Меню оконных классов
При регистрации класса окна можно указать меню по умолчанию, называемое меню классов . Для этого назначьте имя ресурса menu-template члену lpszMenuName структуры WNDCLASS , используемой для регистрации класса.
По умолчанию каждому окну назначается меню класса для класса окна, поэтому вам не нужно явно загружать меню и назначать его каждому окну. Меню класса можно переопределить, указав другой дескриптор меню в вызове функции CreateWindowEx . Вы также можете изменить меню окна после его создания с помощью функции SetMenu . Дополнительные сведения см. в разделе Классы Окон.
Пункты меню
В следующих разделах рассматриваются действия системы, когда пользователь выбирает пункт меню, а также способы, которыми приложение может управлять внешним видом и функциональностью элемента.
- Командные элементы и элементы, открывающие подменю
- Идентификатор элемента меню
- Позиция элемента меню
- Программный доступ к пунктам меню
- Элементы меню по умолчанию
- Пункты меню «Выбранные» и «Очистить»
- Пункты меню «Включено», «Серый» и «Отключено»
- Выделенные пункты меню
- Элементы меню, нарисованные владельцем
- Разделители элементов меню и разрывы строк
Командные элементы и элементы, открывающие подменю
Когда пользователь выбирает командный элемент, система отправляет командное сообщение в окно, которому принадлежит меню. Если элемент команды находится в меню окна, система отправляет WM_SYSCOMMAND сообщение. В противном случае он отправляет WM_COMMAND сообщение.
Связанный с каждым пунктом меню, открывающим подменю, является дескриптором соответствующего подменю. Когда пользователь указывает на такой элемент, система открывает подменю. В окно владельца не отправляется командное сообщение. Однако система отправляет WM_INITMENUPOPUP сообщение в окно владельца перед отображением подменю. Дескриптор подменю, связанного с элементом, можно получить с помощью функции GetSubMenu или GetMenuItemInfo .
Строка меню обычно содержит имена меню, но она также может содержать командные элементы. Подменю обычно содержит командные элементы, но может также содержать элементы, которые открывают вложенные подменю. Добавляя такие элементы в подменю, можно вкладывать меню в любую глубину. Чтобы предоставить пользователю визуальную подсказку, система автоматически отображает небольшую стрелку справа от текста пункта меню, открывающего подменю.
Идентификатор Menu-Item
С каждым элементом меню связано уникальное, определяемое приложением целое число, которое называется идентификатором элемента меню. Когда пользователь выбирает командный элемент в меню, система отправляет идентификатор элемента окну владельца в составе сообщения WM_COMMAND . Процедура window проверяет идентификатор, чтобы определить источник сообщения, и обрабатывает сообщение соответствующим образом. Кроме того, можно указать пункт меню, используя его идентификатор при вызове функций меню. например, чтобы включить или отключить пункт меню.
Элементы меню, открывающие подменю, имеют идентификаторы так же, как и командные элементы. Однако система не отправляет командное сообщение, когда такой элемент выбран в меню. Вместо этого система открывает подменю, связанное с элементом меню.
Чтобы получить идентификатор пункта меню в указанной позиции, используйте функцию GetMenuItemID или GetMenuItemInfo .
Положение Menu-Item
Помимо уникального идентификатора, каждый пункт меню в строке меню или меню имеет уникальное значение позиции. Крайний левый элемент в строке меню или верхний элемент меню имеет нулевую позицию. Значение позиции увеличивается для последующих пунктов меню. Система назначает значение позиции всем элементам меню, включая разделители. На следующем рисунке показаны значения положения элементов в строке меню и в меню.

При вызове функции меню, которая изменяет или извлекает сведения о конкретном пункте меню, можно указать элемент, используя его идентификатор или положение. Дополнительные сведения см. в следующем разделе.
Программный доступ к пунктам меню
Большинство функций меню позволяют указать пункт меню по позиции или по команде. Некоторые функции используют флаги MF_BYPOSITION и MF_BYCOMMAND для указания алгоритма поиска. другие имеют явный параметр fByPosition . Если указать пункт меню по позиции, номер элемента будет отсчитываемым от нуля индексом в меню. Если указать пункт меню по команде, в меню и его подменю выполняется поиск элемента, идентификатор меню которого равен указанному номеру элемента. Если несколько пунктов в иерархии меню совпадают с номером элемента, то не указано, какой из них используется. Если меню содержат повторяющиеся идентификаторы меню, следует использовать операции меню на основе позиции, чтобы избежать этой неоднозначности.
Элементы меню по умолчанию
Подменю может содержать один элемент меню по умолчанию. Когда пользователь открывает подменю двойным щелчком, система отправляет командное сообщение в окно владельца меню и закрывает меню, как если бы был выбран элемент команды по умолчанию. Если командный элемент по умолчанию отсутствует, подменю остается открытым. Чтобы получить и задать элемент по умолчанию для подменю, используйте функции GetMenuDefaultItem и SetMenuDefaultItem .
Пункты меню «Выбранные» и «Очистить»
Элемент меню можно выбрать или очистить. Система отображает растровое изображение рядом с выбранными пунктами меню, чтобы указать их выбранное состояние. Система не отображает растровое изображение рядом с чистыми элементами, если не указано определенное приложением «чистое» растровое изображение. Можно выбрать только элементы меню в меню; Элементы в строке меню не могут быть выбраны.
Приложения обычно проверка или очищают пункт меню, чтобы указать, действует ли параметр. Например, предположим, что в приложении есть панель инструментов, которую пользователь может отобразить или скрыть с помощью команды Панель инструментов в меню. Если панель инструментов скрыта, пункт меню Панель инструментов становится неясным. Когда пользователь выбирает команду, приложение проверяет пункт меню и отображает панель инструментов.
Атрибут проверка метки определяет, выбран ли пункт меню. Атрибут проверка пометки элемента меню можно задать с помощью функции CheckMenuItem. Функцию GetMenuState можно использовать, чтобы определить, выбран или очищен пункт меню.
Иногда группа пунктов меню соответствует набору взаимоисключающих параметров. В этом случае можно указать выбранный параметр с помощью выбранного пункта меню (аналогично элементу управления переключателя). Выбранные элементы-переключатели отображаются с помощью растрового изображения маркеров вместо растрового изображения проверка метки. Чтобы проверка элемент меню и сделать его переключателем, используйте функцию CheckMenuRadioItem.
По умолчанию система отображает точечный рисунок проверка или маркер рядом с выбранными пунктами меню, а рядом с удаленными пунктами меню нет растрового изображения. Однако можно использовать функцию SetMenuItemBitmaps , чтобы связать определенные приложением выбранные и очищенные растровые изображения с элементом меню. Затем система использует указанные растровые изображения, чтобы указать выбранное или очищенное состояние пункта меню.
Определяемые приложением растровые изображения, связанные с элементом меню, должны иметь тот же размер, что и растровое изображение по умолчанию проверка метки, размеры которых могут отличаться в зависимости от разрешения экрана. Чтобы получить правильные измерения, используйте функцию GetSystemMetrics . Вы можете создать несколько ресурсов растровых изображений для разных разрешений экрана; создайте один ресурс растрового изображения и при необходимости масштабируйте его; или создайте точечный рисунок во время выполнения и нарисуйте в нем изображение. Растровые изображения могут быть монохромными или цветными. Тем не менее, поскольку элементы меню инвертируются при выделении, внешний вид некоторых инвертированных цветовых растровых изображений может быть нежелательным. Дополнительные сведения см. в разделе Растровые изображения.
Пункты меню «Включено», «Серый» и «Отключено»
Элемент меню может быть включен, выделен серым цветом или отключен. По умолчанию элемент меню включен. Когда пользователь выбирает включенный пункт меню, система отправляет командное сообщение окну владельца или отображает соответствующее подменю в зависимости от типа пункта меню.
Если элементы меню недоступны пользователю, они должны быть серым или отключены. Не удается выбрать пункты меню с серым и отключенным цветом. Отключенный элемент выглядит так же, как включенный элемент. Когда пользователь щелкает отключенный элемент, он не выбирается, и ничего не происходит. Отключенные элементы могут быть полезны, например, в учебнике, где отображается меню, которое выглядит активно, но не является.
Приложение затеняет недоступный пункт меню, чтобы предоставить пользователю визуальную подсказку о том, что команда недоступна. Серый элемент можно использовать, если действие не подходит (например, команду Печать можно серым цветом в меню Файл , если в системе не установлен принтер).
Функция EnableMenuItem включает, отключает или отключает пункт меню. Чтобы определить, включен ли элемент меню, выделен серым цветом или отключен, используйте функцию GetMenuItemInfo .
Вместо GetMenuItemInfo можно также использовать функцию GetMenuState , чтобы определить, включен ли элемент меню, выделен серым или отключен.
Выделенные пункты меню
Система автоматически выделяет пункты меню в меню по мере их выбора пользователем. Однако выделение можно явно добавить или удалить из имени меню в строке меню с помощью функции HiliteMenuItem . Эта функция не влияет на пункты меню в меню. Однако, если hiliteMenuItem используется для выделения имени меню, имя будет выбрано только. Если пользователь нажимает клавишу ВВОД, выделенный элемент не выбирается. Эта функция может быть полезна, например, в приложении для обучения, демонстрирующем использование меню.
Элементы меню Owner-Drawn
Приложение может полностью контролировать внешний вид пункта меню с помощью элемента, нарисованного владельцем. Элементы, нарисованные владельцем, требуют, чтобы приложение полностью отвечало за рисование выделенных (выделенных), выделенных и очищенных состояний. Например, если приложение предоставило меню шрифтов, оно может нарисовать каждый пункт меню с помощью соответствующего шрифта; элемент для roman будет нарисован с помощью романа, элемент для курсивного будет нарисован курсивом и т. д. Дополнительные сведения см. в разделе Создание элементов меню Owner-Drawn.
Разделители пунктов меню и разрывы строк
Система предоставляет специальный тип пункта меню, называемый разделителем, который отображается в виде горизонтальной линии. Разделитель можно использовать для разделения меню на группы связанных элементов. Разделитель нельзя использовать в строке меню, а пользователь не может выбрать разделитель.
Если строка меню содержит больше имен меню, чем помещается в одной строке, система автоматически разбивает строку меню на две или более строк. Вы можете вызвать разрыв строки в определенном элементе в строке меню, назначив элементу флаг типа MFT_MENUBREAK . Система помещает этот элемент и все последующие элементы в новую строку.
Если меню содержит больше элементов, чем в одном столбце, меню будет усечено. Вы можете вызвать разрыв столбца в определенном элементе меню, назначив элементу флаг типа MFT_MENUBREAK или используя параметр MENUBREAK в инструкции MENUITEM . Система помещает этот элемент и все последующие элементы в новый столбец. Флаг типа MFT_MENUBARBREAK имеет тот же эффект, за исключением того, что между новым и старым столбцами отображается вертикальная линия.
Если для назначения разрывов строк используются функции AppendMenu, InsertMenu или ModifyMenu , следует назначить флаги типов MF_MENUBREAK или MF_MENUBARBREAK.
Сообщения, используемые с меню
Система сообщает о действиях, связанных с меню, отправляя сообщения в процедуру окна, которому принадлежит меню. Система отправляет ряд сообщений, когда пользователь выбирает элементы в строке меню или нажимает правую кнопку мыши, чтобы отобразить контекстное меню.
Когда пользователь активирует элемент в строке меню, окно владельца сначала получает сообщение WM_SYSCOMMAND . Это сообщение содержит флаг, указывающий, активировал ли пользователь меню с помощью клавиатуры (SC_KEYMENU) или мыши (SC_MOUSEMENU). Дополнительные сведения см. в разделе Доступ к меню с помощью клавиатуры.
Затем перед отображением каких-либо меню система отправляет WM_INITMENU сообщение в процедуру окна, чтобы приложение ранее их не увидел. Система отправляет сообщение WM_INITMENU только один раз для каждой активации меню.
Когда пользователь указывает на пункт меню, открывающий подменю, система отправляет окну владельца сообщение WM_INITMENUPOPUP перед отображением подменю. Это сообщение дает приложению возможность изменить подменю перед его отображением.
Каждый раз, когда пользователь перемещает выделение из одного элемента в другой, система отправляет WM_MENUSELECT сообщение в процедуру окна владельца меню. Это сообщение идентифицирует выбранный в данный момент пункт меню. Многие приложения предоставляют информационную область в нижней части окна main и используют это сообщение для отображения дополнительных сведений о выбранном пункте меню.
Когда пользователь выбирает командный пункт в меню, система отправляет WM_COMMAND сообщение в процедуру окна. Слово нижнего порядка параметра wParamсообщения WM_COMMAND содержит идентификатор выбранного элемента. Процедура окна должна проверить идентификатор и обработать сообщение соответствующим образом.
Вы можете сохранить сведения для меню с помощью структуры MENUINFO . Если меню определено с помощью MENUINFO. Значение dwStyle MNS_NOTIFYBYPOS, при выборе элемента система отправляет WM_MENUCOMMAND вместо WM_COMMAND . Это позволяет получить доступ к информации в структуре MENUINFO , а также напрямую предоставляет индекс выбранного элемента.
Не все меню доступны в строке меню окна. Многие приложения отображают контекстные меню, когда пользователь щелкает правую кнопку мыши в определенном месте. Такие приложения должны обрабатывать сообщение WM_CONTEXTMENU и при необходимости отображать контекстное меню. Если приложение не отображает контекстное меню, оно должно передать сообщение WM_CONTEXTMENU функции DefWindowProc для обработки по умолчанию.
Сообщение WM_MENURBUTTONUP отправляется, когда пользователь отпускает правую кнопку мыши, когда курсор находится в пункте меню. Это сообщение предоставляется, чтобы приложения могли отображать контекстное или контекстное меню для пункта меню.
Существует несколько сообщений, в которых используются только меню перетаскивания. WM_MENUGETOBJECT отправляется владельцу меню перетаскивания, когда курсор мыши входит в элемент меню или перемещается от центра элемента к верхней или нижней части элемента. Сообщение WM_MENUDRAG отправляется, когда пользователь фактически перетаскивает элемент меню.
При уничтожении раскрывающегося меню или подменю система отправляет WM_UNINITMENUPOPUP сообщение.
Уничтожение меню
Если меню назначается окну и оно уничтожается, система автоматически уничтожает меню и его подменю, освобождая дескриптор меню и занимаемую им память. Система не уничтожает автоматически меню, которое не назначено окну. Приложение должно уничтожить неназначенные меню, вызвав функцию DestroyMenu . В противном случае меню продолжает существовать в памяти даже после закрытия приложения. Чтобы завершить активное меню вызывающего потока, используйте EndMenu. Если платформа не поддерживает EndMenu, отправьте владельцу активного меню WM_CANCELMODE сообщение.