понедельник, 8 декабря 2008 г.

В чём разница между CreateMenu и CreatePopupMenu?

Это перевод What's the difference between CreateMenu and CreatePopupMenu? Автор: Реймонд Чен.

Функция CreateMenu создаёт горизонтальную полосу меню, пригодную для прикрепления к окнам верхнего уровня. Это тот тип меню, где написано "Файл", "Правка" и т.д.

Функция CreatePopupMenu создаёт вертикальное всплывающее меню, подходящее для использования в качестве подменю другого меню (в горизонтальном меню или всплывающем меню) или для использования в качестве контекстного меню.

Если вы перепутаете эти два типа меню, то у вас получится странное поведение меню в программе. Иногда Windows может определить, что вы перепутали меню, и исправить вас, но лично я бы не рассчитывал на то, что Windows будет успешно читать ваши мысли.

Нет никакого способа определить, какого рода вот это конкретное меню: горизонтальное или вертикальное. Вам просто нужно это знать.

Ответы на другие вопросы о меню:

Когда уничтожается окно, его меню также удаляется. Когда удаляется меню, то удаляется всё дерево меню (т.е. все подменю этого меню, подменю каждого подменю и т.д.). А когда вы сами удаляете меню, то лучше бы ему не быть подменю другого меню. В противном случае это другое меню будет иметь некорретное (invalid) подменю!

Если вы удаляете подменю из родительского меню, то вы становитесь ответственным за его освобождение, потому что оно больше не будет автоматически удаляться при удалении родительского меню.

Допускается иметь несколько родителей. Т.е. одно меню может быть подменю сразу у нескольких меню. Но будьте особенно внимательными, когда вы так делаете: потому что, если один из родителей удаляется, он удаляет и подменю, что приведёт к тому, что у второго родителя останется неверное подменю.

И, наконец: предел вложенности меню в Windows XP равен 25. Разумеется, это ограничение может быть изменено в будущем (как и с окнами, Windows 95 позволяла вам иметь столько уровней вложенности, сколько вы хотите. Фактически, если вы были действительно плохим, вы могли создать бесконечный цикл меню. Конечно же, ваша программа после такого довольно быстро бы вылетела...).

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.