Показать полную графическую версию : Запрет нажатия на правую кнопку мыши
Как запретить пользователю нажимать правую кнопу мыши?
т.е. чтобы при нажатии на неё не происходило ничего на форме, да если на ней лежит какой нить ActiveX компонент со своим popup menu
C++ Builder или Delphi
Xcode
Ну, например, поставить хук на мышь. Хотя это немного излишне.
Можно, например, в цикле GetMessage/DispatchMessage фильтровать соответствующий события, то есть не пропускать их в DispatchMessage. Только вот не уверен, что в Delphi или Builder'е такое можно; не пользуюсь ими ибо.
не пользуюсь ими ибо
а чем пользуетесь?
GetMessage/DispatchMessage
это же чистый WinAPI - должно прокатить...
допустим поставил я хук на мыш
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);
сообщения нажатия на правую кнопку перехватил, а как запретить? желательно на пальцах...
Xcode
допустим поставил я хук на мыш
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);
сообщения нажатия на правую кнопку перехватил, а как запретить? желательно на пальцах...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/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++ сейчас не пишу, естьязыки поинтересней для изучения.
ivank
Т.е. определяешь с помощью GetWindowThreadProcessId, что окно, которому предназначено сообщение, принадлежит твоему процессу и не пропускаешь к нему сообщение, всего и делов.
сейчас попробую...=)
естьязыки поинтересней для изучения.
к примеру?
Дам ссылки на книжки, которые я сейчас (вперемешку) читаю. Не столько про языки, сколько про то, что на 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 лекций.
сенькс... на досуге прочту..
чет ничего не понимаю.... получилась у меня громозкая конструкция:
создал DLL с функцией обработки сообщений мышки:
LRESULT CALLBACK MouseHook(int nCode,WPARAM wParam,LPARAM lParam)
в самой программе:
hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)(pMouseHook), hLib,0);
все работает, сообщени передаются, обрабатываются, но не блокируются.... почему...
может быть потому, что я хочу запретить нажатие правой кнопки не на самой форме, а на находящемся на нем TShockwaveFlash???
А что, если в DispatchMessage не пускать сообщение WM_RBUTTONDOWN? В борланде вроде TAppication::OnMessage есть
пробывал... создаю функцию(или что это там=))
void __fastcall TMainf::ME(tagMSG &Msg, bool &Handled)
{
if(Msg.message==WM_RBUTTONDOWN)
{
DispatchMessage(&Msg);
}
}
В конструкторе окна переопределяю событие
Application->OnMessage=ME;
опять таки сообщение отлавливается, но не блокируется... как контекстное меню по правому клику выпадало, так и продолжает выподать...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.