PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » одновременное нажатие клавиш модификаторов и мыши


одновременное нажатие клавиш модификаторов и мыши

Сообщений 1 страница 7 из 7

1

с клавиатурой всё понятно, а с мышью ни чего нет
канвас не предлагать, про него есть

0

2

newJS написал(а):

с клавиатурой всё понятно, а с мышью ни чего нет
канвас не предлагать, про него есть

Так в обработчике надо при событии мыши проверять wparam,lparam и смотреть была ли клавиша нажата допустим ctrl

0

3

Sergeihik написал(а):

Так в обработчике надо при событии мыши проверять wparam,lparam и смотреть была ли клавиша нажата допустим ctrl

ну и как всё это правильно сделать

0

4

newJS написал(а):

ну и как всё это правильно сделать

Тут наверное ещё вопрос в том если сначала клавиша модификатор нажимается а потом клик мыши тогда возможно и можно посмотреть в wparam, lparam а если наоборот?,тогда наверное только переменную статическую или глобальную делать и в нее писать=допустим нажали ctrl это 1
Если клик далее будет левой то if 1,то это уже 2,else правой то это 3 endif и таким мокаром
На остальные комбинации которые нужны.

0

5

При событии нажатии мыши проверить нажата ли одна из кнопок модификаторов.
KeyboardPushed(KeyID)

0

6

Код:
EnableExplicit
Declare MouseHook(nCode, wParam, lParam)

Define lpdwProcessId, hhkLLMouse, i
Global hGUI

Procedure MouseHook(nCode, wParam, lParam)
  Protected *MHS.MOUSEHOOKSTRUCT = lParam
  Protected bcontrol, balt, bshift, Pressed$
  Static ChangingID
  ; 	= MOUSEHOOKSTRUCT =
  ; 	pt.POINT
  ; 	hwnd.i
  ; 	wHitTestCode.l
  ; 	dwExtraInfo.i
  
  bcontrol = GetAsyncKeyState_(#VK_CONTROL)
  balt = GetAsyncKeyState_(#VK_MENU)
  bshift = GetAsyncKeyState_(#VK_SHIFT)

  If bcontrol
    Pressed$ + "CTRL +"
  EndIf
  If balt
    Pressed$ + "ALT +"
  EndIf
  If bshift
    Pressed$ + "SHIFT +"
  EndIf
  
  Select wParam
    Case #WM_LBUTTONUP
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse UP"
    Case #WM_LBUTTONDOWN 
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse Down"
    Case #WM_LBUTTONDBLCLK
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse DblClicked"
    Case  #WM_RBUTTONUP
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse UP"
    Case  #WM_RBUTTONDOWN
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse Down"
    Case  #WM_RBUTTONDBLCLK
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse DblClicked"
    Case  #WM_MBUTTONUP
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse UP"
    Case  #WM_MBUTTONDOWN
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse Down"
    Case  #WM_MBUTTONDBLCLK
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse DblClicked"
      
      ;     === click in a non-client area ===
      ;     Case  #WM_NCLBUTTONUP
      ;     Case  #WM_NCLBUTTONDOWN
      ;     Case  #WM_NCLBUTTONDBLCLK
      ;     Case  #WM_NCRBUTTONUP
      ;     Case  #WM_NCRBUTTONDOWN
      ;     Case  #WM_NCRBUTTONDBLCLK
      ;     Case  #WM_NCMBUTTONUP
      ;     Case  #WM_NCMBUTTONDOWN
      ;     Case  #WM_NCMBUTTONDBLCLK
      ;     === additional mouse button ===
      ;     Case  #WM_XBUTTONUP
      ;     Case  #WM_XBUTTONDOWN
      ;     Case  #WM_XBUTTONDBLCLK
      
    Case  #WM_MOUSEWHEEL
      Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Mouse wheel"
      
    Case  #WM_MOUSEMOVE
      If *MHS\hwnd <> hGUI And ChangingID <> *MHS\hwnd
        ChangingID = *MHS\hwnd
        Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" Changing"
      EndIf
      
  EndSelect
EndProcedure

hGUI = OpenWindow(0,0,0,600,400,"", #PB_Window_SystemMenu| #PB_Window_ScreenCentered)
For i = 0 To 9
  ButtonGadget(i,10,i * 30,80,25,Str(i))
Next

lpdwProcessId = GetWindowThreadProcessId_(WindowID(0), 0)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE, @MouseHook(), GetModuleHandle_(0), lpdwProcessId)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      UnhookWindowsHookEx_(hhkLLMouse)
      Break
  EndSelect
ForEver

0

7

Lin спасибо, славный огород, на все случаи

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » одновременное нажатие клавиш модификаторов и мыши