Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея.
Но: столкнулся с двумя проблемами:
1. Окну посылается не WM_SYSCOMMAND, а WM_COMMAND при выборе пункта меню. Но это не так страшно, потому что это предсказуемо.
2. Сначала в этом меню все пункты были enabled. Когда я открывал настоящее системное меню окна (ну разворачивал его из трея перед этим, естественно), а потом сворачивал в трей, состояние enabled/disabled было точь-в-точь, как у того настоящего системного меню. И еще был один непредсказуемый момент: ингода, чтобы некоторые пункты моего меню были disabled, не нужно было перед этим баловаться с настоящим системным меню.
А теперь, внимание, вопрос: как открыть нормальное системное меню из трея, чтобы оно функционировало, и чтобы соответствующие пункты его были disabled?
Здравствуйте RS, Вы писали:
RS>Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея.
[]
GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.
Здравствуйте Алекс, Вы писали:
А>GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.
Настоящим я назвал то, которое открывается, когда по левой стороне заголовка кликнуть, или правой кнопой по заголовку. Ненастоящее — это мое, которое я TrackPopupMenu открываю.
GetSystemMenu конечно же использовал, ну тут один интересный факт: если смотреть, что получает WM_INITMENUPOPUP, то хэндлы настоящего и ненастоящего меню разные (у ненастоящего тот, который вернула GetSystemMenu), и в случае настоящего меню там специальный флажок установлен.
Здравствуйте, RS, Вы писали:
RS>Здравствуйте Алекс, Вы писали:
А>>GetSystemMenu использовал? Что значит настоящее/не настоящее системное меню.
RS>Настоящим я назвал то, которое открывается, когда по левой стороне заголовка кликнуть, или правой кнопой по заголовку. Ненастоящее — это мое, которое я TrackPopupMenu открываю.
RS>GetSystemMenu конечно же использовал, ну тут один интересный факт: если смотреть, что получает WM_INITMENUPOPUP, то хэндлы настоящего и ненастоящего меню разные (у ненастоящего тот, который вернула GetSystemMenu), и в случае настоящего меню там специальный флажок установлен.
Попробуй поиграть с WM_NCLBUTTONDOWN/HTSYSMENU.
RS>Свернул окошко в трей, и решил при клике правой кнопкой по иконке в трее открывать системное меню окна. Все делал так, как пишут во многочисленных руководствах о том, как показывать меню из трея. RS>Но: столкнулся с двумя проблемами: RS>1. Окну посылается не WM_SYSCOMMAND, а WM_COMMAND при выборе пункта меню. Но это не так страшно, потому что это предсказуемо. RS>2. Сначала в этом меню все пункты были enabled. Когда я открывал настоящее системное меню окна (ну разворачивал его из трея перед этим, естественно), а потом сворачивал в трей, состояние enabled/disabled было точь-в-точь, как у того настоящего системного меню. И еще был один непредсказуемый момент: ингода, чтобы некоторые пункты моего меню были disabled, не нужно было перед этим баловаться с настоящим системным меню. RS>А теперь, внимание, вопрос: как открыть нормальное системное меню из трея, чтобы оно функционировало, и чтобы соответствующие пункты его были disabled?
Здравствуйте, eugen honeker, Вы писали:
EH>есть один недокументированый трик: EH> EH> SendMessage(hWnd, 0x0787, 0, MAKELPARAM(xPos, yPos));
Ну и что это за WM_USER+xxx? И как это должно работать? Короче, мож я че не так понял, но это не прокатило. Расскажи, плз., откуда ты это взял, где (осы какие) это должно работать, и как этим пользоваться?
З.Ы. Ни SendMessage, ни PostMessage тому окну, от которого хочу получить меню (окно POPUP, но не видимо — я его в трей свернул) не дал нужного результата. SendMessage вернул 0.
Здравствуйте, Аноним, Вы писали:
А>Попробуй поиграть с WM_NCLBUTTONDOWN/HTSYSMENU.
Поиграл. Не наигрался. Не получилось ничего... Ни PostMessage, ни SendMessage...
Если ловить спаем сообщения, которые посылаются моемо окошку, то там за WM_ENTERMENULOOP тут же идет WM_EXITMENULOOP (кажется их так зовут, сорри, тут проверить не могу). Чем вызвано, не пойму. Видимо, придется самому делать enable/disable для пунктов меню.