duilib 快捷键发送消息

全局快捷键设置类,文章最以下,有3种不同的使用方法(假设设置的快捷键,与其它软件的快捷键同样。那么仅仅有你的程序起作用。你释放后它才干够使用)

.h文件

#pragma once
class CHotKey
{
public:
 CHotKey(void);
 ~CHotKey(void);

public:
 //注冊全局热键
 BOOL RegisterHotKey(HWND hWnd, UINT fsModifiers, UINT vk);

 //卸载全局热键
 BOOL UnRegisterHotKey(HWND hWnd); 

 //是否触发热键
 BOOL IsTriggerHosKey(WPARAM wParam, LPARAM lParam);

 //
 virtual void ResponseKeyEvent(WPARAM wParam, LPARAM lParam);
private:
 int m_nHotKeyID;//热键ID
 HWND m_hWnd;
 UINT m_fsModifiers;
 UINT m_vk;
};

.cpp文件

#include "StdAfx.h"
#include "HotKey.h"

CHotKey::CHotKey(void)
:m_nHotKeyID(-1)
,m_hWnd(NULL)
{

}

CHotKey::~CHotKey(void)
{
 if (m_hWnd)
  UnRegisterHotKey(m_hWnd);
}

BOOL CHotKey::RegisterHotKey( HWND hWnd, UINT fsModifiers, UINT vk )
{
 m_hWnd = m_hWnd;
 m_fsModifiers = fsModifiers;
 m_vk = vk;
 m_nHotKeyID = GlobalAddAtom("MyHotKey") - 0xC000;
 return ::RegisterHotKey(hWnd,m_nHotKeyID,m_fsModifiers,m_vk);
}

BOOL CHotKey::UnRegisterHotKey(HWND hWnd)
{
 m_hWnd = NULL;
 return ::UnregisterHotKey(hWnd,m_nHotKeyID);
}

BOOL CHotKey::IsTriggerHosKey(WPARAM wParam, LPARAM lParam)
{
 if (LOWORD(lParam) == m_fsModifiers && HIWORD(lParam) == m_vk)
  return TRUE; 

 return FALSE;
}

void CHotKey::ResponseKeyEvent( WPARAM wParam, LPARAM lParam )
{
 if (IsTriggerHosKey(wParam,lParam))
 {
  //.....
 }
}

//使用例如以下

列1:1个系统键+1虚拟键

m_HotKey.RegisterHotKey(m_uiPaintManager.GetPaintWindow(),MOD_ALT,'S');

//收到数据处理

switch(uMsg)
 {
 case WM_HOTKEY:
  {  
   if (m_HotKey.IsTriggerHosKey(wParam,lParam))
   {
     //做事情
   }
 
  }
  break;

}

列2:2个系统键(ctrl+shit)

qq的发送消息方式

m_HotKey.RegisterHotKey(hWnd,m_nHotKeyID,MOD_SHIFT|MOD_CONTROL,0);

//收到数据处理

switch(uMsg)
 {
 case WM_HOTKEY:
  {  
   if ((GetKeyState(VK_SHIFT)<0) && (GetKeyState(VK_CONTROL)<0))
   {
     //做事情
   }
 
  }
  break;

}

列3:2个系统键+1虚拟键

m_HotKey.RegisterHotKey(hWnd,m_nHotKeyID,MOD_SHIFT|MOD_CONTROL,‘S’);

//收到数据处理

switch(uMsg)
 {
 case WM_HOTKEY:
  {  
   if ((GetKeyState(VK_SHIFT)<0) && (GetKeyState(VK_CONTROL)<0) && (HIWORD(lParam) == 'S'))
   {
     //做事情
   }
 
  }
  break;

}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wclaccp/article/details/51143303


原文地址:https://www.cnblogs.com/zsychanpin/p/7205998.html