Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Popup меню 
:(
    Опции темы
NiJazz
Дата 21.1.2005, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 2
Всего: 23



Как в VC++ создать сабж на форме?
PM MAIL   Вверх
alien_by
Дата 21.1.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 29.11.2004
Где: Belarus/Gomel

Репутация: 5
Всего: 8



В редакторе ресурсов создаёшь ресурс меню. Наполняешь его (там всё просто).

Затем есть два способа.
Если тебе нужно основное меню... Тогда просто в свойствах диалога находишь свойство Menu и выбираешь там ИД ресурса того меню, которое ты только что создал.

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

Код

       // Загружаем меню...
       // конечно лучше его загрузить где нибудь один раз, но для примера сойдёт
CMenu menu;
menu.LoadMenu(IDR_MENU1);

       // Получаем первое подменю
       // Попытаюсь обьяснить что тут происходит после примера
CMenu* pSubMenu = menu.GetSubMenu(0);

       // Показываем меню...
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);


Вообщем там происходит следующее. В редакторе ресурсов ты редактишь горизонтальную и вертикальную линейки меню, горизонтальная линейка это не совсем то smile (Хотя если у всех её элементов установить свойство popup в false, то можно использовать в качестве всплывающего меню и её...)
А вот вертикальное меню - это то... smile Так вот данная функция выделяет вертикальное подменю, для того, чтобы его показать.

В принципе можно создавать меню динамически, тогда
Код

        // Создаём меню
CMenu menu;
menu.CreatePopupMenu();

        // Добавляем элемент(ы)
menu.AppendMenu(MF_STRING, ID_APP_EXIT, (LPCTSTR)"E&xit");

       // Исполняем
menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);


Опять же хочу оговорится, что лучше создате меню один раз (где нибудь в конструкторе или Dialog::Create) ну а в обработчике только исполнять.

И ещё, не смотря на то, что мы указываем окно диалога в качестве родительского для меню, оно может отображаться не там где надо smile Поэтому может понадобится использовать функции типа GetWindowRect для расчёта правильных координат.
PM MAIL ICQ   Вверх
Gazon
Дата 22.1.2005, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 4
Всего: 8



--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
IEZ
Дата 11.2.2005, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Цитата(alien_by @ 21.1.2005, 17:27)
// Создаём меню
CMenu menu;
menu.CreatePopupMenu();

        // Добавляем элемент(ы)
menu.AppendMenu(MF_STRING, ID_APP_EXIT, (LPCTSTR)"E&xit");

      // Исполняем
menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);

На практике этот способ более удобен. smile



--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
The Thing
Дата 18.3.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



А в VC6 в редакторе ресурсов.. создал меню, пр. кл. м. по нему..
есть такая опция как View As Popup
и менюшка уже является Popup

Код

CMenu menu;
menu.LoadMenu(IDR_MENU1);

menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);


не проходит..





--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 19.3.2005, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



народ? кто может объяснить как сделать?..


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
IEZ
Дата 21.3.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 3



The Thing В чем проблема? Напиши.


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
Nuzur
Дата 23.3.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Цитата(The @ 18.3.2005, 20:50)
А в VC6 в редакторе ресурсов.. создал меню, пр. кл. м. по нему..
есть такая опция как View As Popup
и менюшка уже является Popup

Код

CMenu menu;
menu.LoadMenu(IDR_MENU1);

menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);


не проходит..

Ты ведь забыл

// Получаем первое подменю
// Попытаюсь обьяснить что тут происходит после примера
CMenu* pSubMenu = menu.GetSubMenu(0);



--------------------
Never again...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0773 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.