информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[win32] грабли с контекстным меню - wm_rbuttondown в дочерних окнах. 27.10.03 11:25  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Дано: окно с элементами управления, некоторые из которых - ActiveX сторонних производителей.
Надо: вывести контекстное меню при клике правой кнопкой в ЛЮБОМ месте окна.

Удалось решить проблему (под W98) таким способом.

При созданиии окна - модифицируем стиль дочерних:
GetDlgItem(IDC_...)->ModifyStyleEx(WS_EX_NOPARENTNOTIFY,0,0);

В обработчике OnParentNotify:
void xxx::OnParentNotify( UINT message, LPARAM lParam ) {
if ( WM_RBUTTONDOWN == (message & 0xFFFF) ) {
CPoint point;
point.x = short(lParam & 0xFFFF);
point.y = short(lParam >> 16);
CWnd *wp = ChildWindowFromPoint(point);

CreateContextMenu(point); /* та же функция, что вызывается при обработке WM_RBUTTONDOWN */
wp->PostMessage(WM_CANCELMODE);
}
}

Фокус в том, что без PostMessage все это работает на редкость криво - после закрытия меню ВСЕ сообщения от мыши идут в окно, получившее WM_RBUTTONDOWN - и прекратить это безобразие довольно трудно. Такое впечатление, что mouse capture остается активным после закрытия меню, хотя GetCapture упорно выдает ноль. Спасает ситуацию WM_CANCELMODE, причем не через SendMessage - а постановкой в очередь.

Может, кто-нибудь знает более изящный способ решения проблемы?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach