Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Запрет нажатия на правую кнопку мыши (http://forum.oszone.net/showthread.php?t=52473)

XCodeR 08-08-2005 09:55 346593

Запрет нажатия на правую кнопку мыши
 
Как запретить пользователю нажимать правую кнопу мыши?
т.е. чтобы при нажатии на неё не происходило ничего на форме, да если на ней лежит какой нить ActiveX компонент со своим popup menu
C++ Builder или Delphi

ivank 08-08-2005 13:41 346629

Xcode
Ну, например, поставить хук на мышь. Хотя это немного излишне.

Можно, например, в цикле GetMessage/DispatchMessage фильтровать соответствующий события, то есть не пропускать их в DispatchMessage. Только вот не уверен, что в Delphi или Builder'е такое можно; не пользуюсь ими ибо.

XCodeR 09-08-2005 09:50 346835

Цитата:

не пользуюсь ими ибо
а чем пользуетесь?
Цитата:

GetMessage/DispatchMessage
это же чистый WinAPI - должно прокатить...

XCodeR 09-08-2005 10:48 346853

допустим поставил я хук на мыш
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);

сообщения нажатия на правую кнопку перехватил, а как запретить? желательно на пальцах...

ivank 09-08-2005 12:34 346873

Xcode
Цитата:

допустим поставил я хук на мыш
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);

сообщения нажатия на правую кнопку перехватил, а как запретить? желательно на пальцах...
http://msdn.microsoft.com/library/de.../mouseproc.asp
Цитата:

If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.
Т.е. определяешь с помощью GetWindowThreadProcessId, что окно, которому предназначено сообщение, принадлежит твоему процессу и не пропускаешь к нему сообщение, всего и делов.

Цитата:

GetMessage/DispatchMessage

это же чистый WinAPI - должно прокатить...
Проблема в том, что цикл обработки сообщений, скорее всего, спрятан в билдере где-то внутри. Хотя может и есть какие-то способы в него вмешаться. Но мне этот способ больше нравится, поскольку затрагивает только одно приложение, а не все, как в случае с хуком. И накладных расходов получается на порядок меньше.

Цитата:

а чем пользуетесь?
можно на ты. Я не такой старый и опытный, что бы мне выкали. На работе я пользуюсь gcc и wxWindows. Не на работе я на C++ сейчас не пишу, естьязыки поинтересней для изучения.

XCodeR 09-08-2005 12:51 346884

ivank
Цитата:

Т.е. определяешь с помощью GetWindowThreadProcessId, что окно, которому предназначено сообщение, принадлежит твоему процессу и не пропускаешь к нему сообщение, всего и делов.
сейчас попробую...=)
Цитата:

естьязыки поинтересней для изучения.
к примеру?

ivank 09-08-2005 14:00 346905

Дам ссылки на книжки, которые я сейчас (вперемешку) читаю. Не столько про языки, сколько про то, что на C++ свет клином не сошёлся.

http://mitpress.mit.edu/sicp/
http://www2.info.ucl.ac.be/people/PVR/book.html
http://caml.inria.fr/pub/docs/oreilly-book/
http://caml.inria.fr/pub/docs/u3-ocaml/

Дома я как правило пишу на Python'е и пытаюсь на O'Caml. После того как разберусь с камлом, на очереди ещё стоят Scheme/LISP, Haskell, Erlang и много других интересных языков с интересными концепциями.

Настоятельно рекомендую первые две книги в списке прочитать, очень интересно. Значительно расширяет кругозор. А к первой книге ещё можно и курс лекций, на котором она построена, скачать. Его видео-версию, 20 лекций.

XCode2 09-08-2005 15:45 346924

сенькс... на досуге прочту..

XCodeR 10-08-2005 01:32 347038

чет ничего не понимаю.... получилась у меня громозкая конструкция:
создал DLL с функцией обработки сообщений мышки:
LRESULT CALLBACK MouseHook(int nCode,WPARAM wParam,LPARAM lParam)

в самой программе:
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);

все работает, сообщени передаются, обрабатываются, но не блокируются.... почему...

может быть потому, что я хочу запретить нажатие правой кнопки не на самой форме, а на находящемся на нем TShockwaveFlash???

pva 10-08-2005 13:51 347188

А что, если в DispatchMessage не пускать сообщение WM_RBUTTONDOWN? В борланде вроде TAppication::OnMessage есть

XCodeR 10-08-2005 16:47 347244

пробЫвал... создаю функцию(или что это там=))
void __fastcall TMainf::ME(tagMSG &Msg, bool &Handled)
{
if(Msg.message==WM_RBUTTONDOWN)
{
DispatchMessage(&Msg);
}
}


В конструкторе окна переопределяю событие
Application->OnMessage=ME;

опять таки сообщение отлавливается, но не блокируется... как контекстное меню по правому клику выпадало, так и продолжает выподать...


Время: 08:43.

Время: 08:43.
© OSzone.net 2001-