Дано: окно с элементами управления, некоторые из которых - ActiveX сторонних производителей.
Надо: вывести контекстное меню при клике правой кнопкой в ЛЮБОМ месте окна.
Удалось решить проблему (под W98) таким способом.
При созданиии окна - модифицируем стиль дочерних:
GetDlgItem(IDC_...)->ModifyStyleEx(WS_EX_NOPARENTNOTIFY,0,0);
CreateContextMenu(point); /* та же функция, что вызывается при обработке WM_RBUTTONDOWN */
wp->PostMessage(WM_CANCELMODE);
}
}
Фокус в том, что без PostMessage все это работает на редкость криво - после закрытия меню ВСЕ сообщения от мыши идут в окно, получившее WM_RBUTTONDOWN - и прекратить это безобразие довольно трудно. Такое впечатление, что mouse capture остается активным после закрытия меню, хотя GetCapture упорно выдает ноль. Спасает ситуацию WM_CANCELMODE, причем не через SendMessage - а постановкой в очередь.
Может, кто-нибудь знает более изящный способ решения проблемы?