System menu окна и TrackPopupMenu
От: RS Земля ICQ: 148844272
Дата: 11.11.02 09:14
Оценка:
Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея.
Но: столкнулся с двумя проблемами:
1. Окну посылается не WM_SYSCOMMAND, а WM_COMMAND при выборе пункта меню. Но это не так страшно, потому что это предсказуемо.
2. Сначала в этом меню все пункты были enabled. Когда я открывал настоящее системное меню окна (ну разворачивал его из трея перед этим, естественно), а потом сворачивал в трей, состояние enabled/disabled было точь-в-точь, как у того настоящего системного меню. И еще был один непредсказуемый момент: ингода, чтобы некоторые пункты моего меню были disabled, не нужно было перед этим баловаться с настоящим системным меню.
А теперь, внимание, вопрос: как открыть нормальное системное меню из трея, чтобы оно функционировало, и чтобы соответствующие пункты его были disabled?
Re: System menu окна и TrackPopupMenu
От: Алекс Россия http://wise-orm.com
Дата: 11.11.02 09:20
Оценка:
Здравствуйте RS, Вы писали:

RS>Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея.


[]

GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.
Re[2]: System menu окна и TrackPopupMenu
От: RS Земля ICQ: 148844272
Дата: 11.11.02 09:27
Оценка:
Здравствуйте Алекс, Вы писали:

А>GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.


Настоящим я назвал то, которое открывается, когда по левой стороне заголовка кликнуть, или правой кнопой по заголовку. Ненастоящее — это мое, которое я TrackPopupMenu открываю.

GetSystemMenu конечно же использовал, ну тут один интересный факт: если смотреть, что получает WM_INITMENUPOPUP, то хэндлы настоящего и ненастоящего меню разные (у ненастоящего тот, который вернула GetSystemMenu), и в случае настоящего меню там специальный флажок установлен.
Re[3]: System menu окна и TrackPopupMenu
От: eugen honeker  
Дата: 26.11.02 12:47
Оценка:
Здравствуйте, RS, Вы писали:

RS>Здравствуйте Алекс, Вы писали:


А>>GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.


RS>Настоящим я назвал то, которое открывается, когда по левой стороне заголовка кликнуть, или правой кнопой по заголовку. Ненастоящее — это мое, которое я TrackPopupMenu открываю.


RS>GetSystemMenu конечно же использовал, ну тут один интересный факт: если смотреть, что получает WM_INITMENUPOPUP, то хэндлы настоящего и ненастоящего меню разные (у ненастоящего тот, который вернула GetSystemMenu), и в случае настоящего меню там специальный флажок установлен.


есть один недокументированый трик:

SendMessage(hWnd, 0x0787, 0, MAKELPARAM(xPos, yPos));
Re: System menu окна и TrackPopupMenu
От: Аноним  
Дата: 28.11.02 23:32
Оценка:
Здравствуйте, RS.

Попробуй поиграть с WM_NCLBUTTONDOWN/HTSYSMENU.

RS>Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея.

RS>Но: столкнулся с двумя проблемами:
RS>1. Окну посылается не WM_SYSCOMMAND, а WM_COMMAND при выборе пункта меню. Но это не так страшно, потому что это предсказуемо.
RS>2. Сначала в этом меню все пункты были enabled. Когда я открывал настоящее системное меню окна (ну разворачивал его из трея перед этим, естественно), а потом сворачивал в трей, состояние enabled/disabled было точь-в-точь, как у того настоящего системного меню. И еще был один непредсказуемый момент: ингода, чтобы некоторые пункты моего меню были disabled, не нужно было перед этим баловаться с настоящим системным меню.
RS>А теперь, внимание, вопрос: как открыть нормальное системное меню из трея, чтобы оно функционировало, и чтобы соответствующие пункты его были disabled?
Re[4]: System menu окна и TrackPopupMenu
От: RS Земля ICQ: 148844272
Дата: 29.11.02 09:11
Оценка:
Здравствуйте, eugen honeker, Вы писали:

EH>есть один недокументированый трик:

EH>
EH> SendMessage(hWnd, 0x0787, 0, MAKELPARAM(xPos, yPos));

Ну и что это за WM_USER+xxx? И как это должно работать? Короче, мож я че не так понял, но это не прокатило. Расскажи, плз., откуда ты это взял, где (осы какие) это должно работать, и как этим пользоваться?

З.Ы. Ни SendMessage, ни PostMessage тому окну, от которого хочу получить меню (окно POPUP, но не видимо — я его в трей свернул) не дал нужного результата. SendMessage вернул 0.
Re[2]: System menu окна и TrackPopupMenu
От: RS Земля ICQ: 148844272
Дата: 04.12.02 08:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Попробуй поиграть с WM_NCLBUTTONDOWN/HTSYSMENU.


Поиграл. Не наигрался. Не получилось ничего... Ни PostMessage, ни SendMessage...
Если ловить спаем сообщения, которые посылаются моемо окошку, то там за WM_ENTERMENULOOP тут же идет WM_EXITMENULOOP (кажется их так зовут, сорри, тут проверить не могу). Чем вызвано, не пойму. Видимо, придется самому делать enable/disable для пунктов меню.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.