контекстное меню и системный трей
От: Аноним  
Дата: 08.06.07 06:22
Оценка:
доброго времени суток.

запихал иконку в системный трей на КПК все отлично.
теперь хотелось бы еще прикрутить туда контекстное меню, т.е
что бы по нажатию на эту иконку появлялось контекстное меню.

может кто подскажет как это можно как это можно сделать?
Re: контекстное меню и системный трей
От: budko Украина  
Дата: 14.06.07 14:00
Оценка: 3 (2)
Здравствуйте, Аноним, Вы писали:

А>доброго времени суток.


А>запихал иконку в системный трей на КПК все отлично.

А>теперь хотелось бы еще прикрутить туда контекстное меню, т.е
А>что бы по нажатию на эту иконку появлялось контекстное меню.

А>может кто подскажет как это можно как это можно сделать?


можно так, если я правильно понял, что вы хотите:
BOOL ShowMyPopupMenu( const int & x, const int & y )
{
enum EnumMenuItems{ MENU_1, MENU_2, MENU_3 };
HMENU hMainTrayMenu = ::CreatePopupMenu();

InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_1, TEXT("1") );
InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_2, TEXT("2") );
InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_3, TEXT("3") );

switch( TrackPopupMenuEx( hMainTrayMenu, TPM_RETURNCMD, x, y, m_hWnd, 0L ) )
{
case MENU_1:
// ....
break;
case MENU_2:
// ....
break;
case MENU_3:
// ....
break;
default:
// ...
break;
}

return TRUE;
}
ICQ: 219084095
Re[2]: контекстное меню и системный трей
От: Byt Россия  
Дата: 21.06.07 03:41
Оценка:
Здравствуйте, budko, Вы писали:

B>можно так, если я правильно понял, что вы хотите:

B>BOOL ShowMyPopupMenu( const int & x, const int & y )
B>{
B> enum EnumMenuItems{ MENU_1, MENU_2, MENU_3 };
B> HMENU hMainTrayMenu = ::CreatePopupMenu();

B> InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_1, TEXT("1") );

B> InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_2, TEXT("2") );
B> InsertMenu( hMainTrayMenu, -1, MF_BYPOSITION | MF_STRING, MENU_3, TEXT("3") );

B> switch( TrackPopupMenuEx( hMainTrayMenu, TPM_RETURNCMD, x, y, m_hWnd, 0L ) )

B> {
B> case MENU_1:
B> // ....
B> break;
B> case MENU_2:
B> // ....
B> break;
B> case MENU_3:
B> // ....
B> break;
B> default:
B> // ...
B> break;
B> }

B> return TRUE;

B>}

большое спасибо!
в данном примере есть одна не точность.
TrackPopupMenuEx(...) возвращает 0 если пункт меню не был выбран.
MENU_1 по умолчанию имеет значение 0 если ему не задать конкретное значение.
и получается что мы ничего не выбрали меню скрылось и у нас выполнелось что-то что описано в

case MENU_1:
// ....
break;

и тут сразу еще один вопрос.
в функцию ShowMyPopupMenu передаются координаты верхнего левого угла менюшки.
если задать координаты таким образом что менюша не смогла бы развернуться вниз,
то она отрисовывается снизу вверх с самого низа эрана при этом перекрывая трей. можно ли сделать так что бы она всплывала
снизу вверх но не с самого низа экрана а начиная с трея? (так как высплывает менюшка когда тыкаем на иконку bluetooth)
Re[3]: контекстное меню и системный трей
От: Byt Россия  
Дата: 22.06.07 09:01
Оценка:
нашел решение. как всегда все оказалось очень просто.
в функцию TrackPopupMenuEx в качестве uFlags передается TPM_BOTTOMALIGN и менюшка всплывает снизу вверх от указанных координат
Re[3]: контекстное меню и системный трей
От: budko Украина  
Дата: 22.06.07 11:08
Оценка:
Здравствуйте, Byt, Вы писали:

Byt>большое спасибо!

Byt>в данном примере есть одна не точность.
Byt>TrackPopupMenuEx(...) возвращает 0 если пункт меню не был выбран.
Byt>MENU_1 по умолчанию имеет значение 0 если ему не задать конкретное значение.
Byt>и получается что мы ничего не выбрали меню скрылось и у нас выполнелось что-то что описано в

Byt>case MENU_1:

Byt> // ....
Byt> break;

ну я просто по памяти набрал... основной смысл, так сказать
ICQ: 219084095
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.