當前位置:編程學習大全網 - 編程語言 - Qt 全局熱鍵要怎麽做

Qt 全局熱鍵要怎麽做

想要在Qt裏使用全局熱鍵,最好的辦法是重載QApplication裏的winEventFilter函數。這個函數是用來響應Windows系統信息的。其函數原型為virtual bool winEventFilter(MSG *msg, long *result)。當msg指針中的message(MSG結構中的壹個元素)為WM_HOTKEY類型時,就是用戶激發了熱鍵。整個過程和在VC的消息響應機制很類似,只不過換成了Qt而已。

而如果我們想要添加自己的全局熱鍵,只需要使用RegisterHotKey函數即可。其函數原型為:

BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk );

HWND類型是Windows中的窗口句柄類型,在Qt中,QWidget及其子類均可使用winId()函數得到。

第二個參數,是壹個原子操作類型,用ATOM GlobalAddAtom(LPCTSTR lpString )函數得到。這也是壹個Win32API,根據壹個string參數可以得到壹個唯壹的值。使用完之後,必須使用GlobalDeleteAtom函數刪除掉整個ATOM。其函數原型為ATOM GlobalDeleteAtom( ATOM nAtom )。

後面兩個參數,壹個是修飾鍵,壹個是普通按鍵。例如,假設我們想註冊Ctrl+F4這個熱鍵組合,則fsModifiers就是MOD_CONTROL,而vk就是VK_F4。

如果註冊成功,就返回true,否則,返回false。

註意,使用完之後,要使用UnregisterHotKey函數註銷,否則妳可能再也無法註冊這個熱鍵了!除非重啟。其函數原型為:BOOL UnregisterHotKey(HWND hWnd, int id )。

ok,熱鍵註冊就完成了。當按下熱鍵後,我們就會在QApplication裏的winEventFilter函數中收到壹個msg。這個msg,前面也說過,我們需要知道它的壹個元素message是不是WM_HOTKEY。如果是,就證明我們收到了Windows系統的熱鍵信息。在MSG結構中,我們可能還需要理解的元素有兩個,分別是wParam和lParam。wParam是註冊熱鍵時所用的id,也就是ATOM(原子)。而lParam就是我們的熱鍵了。其實際上是壹個32位的類型,前面16位代表普通按鍵,後16位代表的是修飾鍵。

  • 上一篇:急!ECS Iris主板兼容金士頓內存條嗎
  • 下一篇:電腦術語有什麽
  • copyright 2024編程學習大全網