• 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
    
    
  • 相关阅读:
    HTML5新增
    【目录】洛谷|CODEVS题解汇总
    【搜索】kkksc03考前临时抱佛脚
    【模拟】压缩技术
    【模拟】爱与愁的一千个伤心的理由
    【搜索】棋盘
    【模拟】图书管理员
    【递归】对称二叉树
    【题单】挖坑大行动
    【模拟】弹珠游戏
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7205998.html
Copyright © 2020-2023  润新知