Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание всплывающего меню, Как создать всплывающее меню? 
V
    Опции темы
it_medved
Дата 5.5.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как создать всплывающее меню, которое дублирует главное меню?
PM MAIL WWW   Вверх
zkv
Дата 5.5.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



Код

void CTestDialogDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
    CMenu     Menu, *pPopupMenu;

    ClientToScreen(&point);
   
    BOOL ret=Menu.LoadMenu(IDR_MENU1);
    pPopupMenu = Menu.GetSubMenu(0);
    ASSERT(pPopupMenu);
    int a=5,b = 7,c = 9;
          
    nFlags = pPopupMenu->TrackPopupMenu(TPM_RETURNCMD|TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
    switch(nFlags) // nFlags = 1
    {
    case ID_SDS_1:
        MessageBox("sds1");
    break;

    case ID_SDS_2:
        MessageBox("sds2");
    }
    CDialog::OnRButtonDown(nFlags, point);
}


это код из какого то вопроса, возникавшего на форуме

Это сообщение отредактировал(а) zkv - 5.5.2007, 18:25
PM MAIL   Вверх
it_medved
Дата 5.5.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ой, а ты можешь обьяснит некоторые моменты из кода?

Код

void CTestDialogDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
    CMenu     Menu, *pPopupMenu;
    ClientToScreen(&point);
   
    BOOL ret=Menu.LoadMenu(IDR_MENU1);
    pPopupMenu = Menu.GetSubMenu(0);//что тут делается?
    ASSERT(pPopupMenu);
    int a=5,b = 7,c = 9;
          
    nFlags = pPopupMenu->TrackPopupMenu(TPM_RETURNCMD|TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);//А тут выставляются ID элеменов меню?
    switch(nFlags) // nFlags = 1
    {
    case ID_SDS_1:
        MessageBox("sds1");
    break;
    case ID_SDS_2:
        MessageBox("sds2");
    }
    CDialog::OnRButtonDown(nFlags, point);
}


И еще, это обработчик нажатия на правую кнопку главного окна?

Добавлено через 3 минуты и 36 секунд
Как вообще создать такой обработчик?
PM MAIL WWW   Вверх
zkv
Дата 5.5.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



Цитата(it_medved @  5.5.2007,  18:33 Найти цитируемый пост)
pPopupMenu = Menu.GetSubMenu(0);//что тут делается?

первое подменю берется, те в стандартном меню это было бы меню "Файл"

Цитата(it_medved @  5.5.2007,  18:33 Найти цитируемый пост)
 nFlags = pPopupMenu->TrackPopupMenu(TPM_RETURNCMD|TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);//А тут выставляются ID элеменов меню?

Цитата(МСДН)

Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu.

BOOL TrackPopupMenu(
   UINT nFlags,
   int x,
   int y,
   CWnd* pWnd,
   LPCRECT lpRect = 0
);
Parameters
nFlags 
Specifies a screen-position flag and a mouse-button flag. The screen-position flag can be one of the following: 
TPM_CENTERALIGN   Centers the pop-up menu horizontally relative to the coordinate specified by x. 
TPM_LEFTALIGN   Positions the pop-up menu so that its left side is aligned with the coordinate specified by x. 
TPM_RIGHTALIGN   Positions the pop-up menu so that its right side is aligned with the coordinate specified by x. 
The mouse-button flag can be either of the following: 

TPM_LEFTBUTTON   Causes the pop-up menu to track the left mouse button. 
TPM_RIGHTBUTTON   Causes the pop-up menu to track the right mouse button. 

Specifies the horizontal position in screen coordinates of the pop-up menu. Depending on the value of the nFlags parameter, the menu can be left-aligned, right-aligned, or centered relative to this position. 

Specifies the vertical position in screen coordinates of the top of the menu on the screen. 
pWnd 
Identifies the window that owns the pop-up menu. This window receives all WM_COMMAND messages from the menu. In Windows versions 3.1 and later, the window does not receive WM_COMMAND messages until TrackPopupMenu returns. In Windows 3.0, the window receives WM_COMMAND messages before TrackPopupMenu returns. 
lpRect 
Points to a RECT structure or CRect object that contains the screen coordinates of a rectangle within which the user can click without dismissing the pop-up menu. If this parameter is 0, the pop-up menu is dismissed if the user clicks outside the pop-up menu. This must be 0 for Windows 3.0. 
For Windows 3.1 and later, you can use the following constants: 

TPM_CENTERALIGN 
TPM_LEFTALIGN 
TPM_RIGHTALIGN 
TPM_RIGHTBUTTON 
Return Value
Nonzero if the function is successful; otherwise 0.

Remarks
A floating pop-up menu can appear anywhere on the screen.

smile
Цитата

И еще, это обработчик нажатия на правую кнопку главного окна?

угу
Цитата

Как вообще создать такой обработчик?

в пропертях класса окна повесь обработчик на WM_RBUTTONDOWN

Это сообщение отредактировал(а) zkv - 5.5.2007, 18:40
PM MAIL   Вверх
it_medved
  Дата 5.5.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо, сейчас проверю. smile

Добавлено через 9 минут и 36 секунд
А можно ли как-то для сокращения кода, передать в pPopupMenu = Menu.GetSubMenu(0) вместо 0 номер меню (как я понял оно начинается слева)? Не хочется заниматся рутиной smile

Добавлено через 11 минут и 39 секунд
А как вообще запихнут все меню в ето всплывающее???
PM MAIL WWW   Вверх
DigitSphinx
Дата 5.5.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да , мне тоже очень хочется знать это !!
но если очень надо и не важно что выглядит паршиво то делай так
Код

void CTestDialogDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    ClientToScreen(&point);
    GetMenu()->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, this);
    CDialog::OnRButtonUp(nFlags, point);
}

 smile  smile  smile 


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
zkv
Дата 5.5.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 16
Всего: 92



Цитата(it_medved @  5.5.2007,  18:47 Найти цитируемый пост)
А как вообще запихнут все меню в ето всплывающее??? 

ребята, честно говоря не знаю, никогда не вставало такой задачи. Вы представляете, как это должно выглядеть? Или встречали в какой нибудь проге подобное? smile
Можно нарисовать отдельное меню, туда запихать все, что у вас есть (в одну колонку, можно поделить сепараторами), и вызывать его.
PM MAIL   Вверх
it_medved
  Дата 5.5.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


 




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


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

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