• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Wm_contextmenu

  • Автор темы Dimmuborgir
  • Дата начала
D

Dimmuborgir

Сколько ни пользовался, никогда не сталкивался с такой проблеммой. В классе, унаследованном от CTreeView добавил обработчик WM_CONTEXTMENU, который по описанию должен вызваться при нажатии правой конпки мыши в области окна. Этого почему то не происходит, странным образом обработчик вызывается только при двойном щелчке ПКМ, с последующим одинарным... К сожалению ни хелп, ни исходники МФЦ не дали мне никакого ответа.. Может быть кто нибудь сталкивался с чем то подобным?
 
G

grigsoft

Собственного обработчика RBTNDOWN нету случайно? Нигде в дереве классов? Тогда можно попробовать спаем потыкать - идет в контрол сообщение, или нет. Может диалог его рубит раньше?
 
D

Dimmuborgir

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

grigsoft

Я не совет давал, а вопрос задал наводящий. Проглатываться сообщение может потому как кто-то его некорректно отработал. Вариантов тут много - включая дополнительное приложение в системе, вешающая хук на правую кнопку для своих целей, типа расширителя меню. На другой машине пробовали?
 
D

Dimmuborgir

да. на другой машине тоже пробовал - точно так же. А совет - воспользоваться спай, сам как то сразу не догадался. Естествоено за обработчиками типа Rbutton я слежу.
 
D

Dimmuborgir

Кажется, разобрался. Сообщение WM_CONTEXTMENU не посылается дереву по одному клику ПКМ... Решение очевидно: обрабатываем TVN_SELCHANGED и затем WM_RBUTTONDOWN:

Код:
void CHeaderView::OnRButtonDown(UINT nFlags, CPoint point) 
{
POINTS pts={point.x,point.y};
SendMessage(WM_LBUTTONDOWN,0,*((LPARAM*)&pts));
OnContextMenu(this,point);	
// CTreeView::OnRButtonDown(nFlags, point);
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!