Название: SRC Обработка Windows messages WM_SYSCOMMAND Отправлено: soho от Февраля 19, 2006, 12:04 Может кому пригодится:
Фрагмент кода, добавляющего в системное меню окна пункт "Always On Top" ("Поверх остальных окон"). Может быть переделан под обработку любых других сообщений. Вывод системного меню собровождается сообщением WM_SYSCOMMAND. Перехват этого сообщения и организуем. В первую очередь, необходимо определить Qt'шный фильтр сообщений (он не определен ни в одном заголовочнике Qt (по крайней мере в Qt 3.3), поэтому сделаем это ручками): Код: typedef int ( *QWinEventFilter )( MSG* ); Код: const UINT MENU_PINUP_ID = 433973; Устанавливаем наш фильтр: Код: void init( HWND winId, const WCHAR* swzMenuText ) { Код нашего фильтра: Код: int wlogWindowEventFilter( MSG *pMsg ) { Собственно функция, устанавливающая наше окно поверх остальных: Код: void onAlwaysOnTop() { Как это вызывать: Код: WSysMenu::init( parent->winId(), tr( "Always On Top" ).ucs2()); А это результат:(http://img101.imageshack.us/img101/4484/sysmenu8hr.gif) Обратите внимание, что за счет того, что мы убрали пункт меню "Закрыть" (::RemoveMenu( _hSysMenu, SC_CLOSE, MF_BYCOMMAND )) кнопка закрытия окна тоже стала недоступной. |