• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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);
}
 
Мы в соцсетях:

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