|
|
|
|
/**
|
|
|
|
|
* Copyright (C) 2014-2050 SOUI团队
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* @file SHotKeyCtrl.h
|
|
|
|
|
* @brief 热键控件
|
|
|
|
|
* @version v1.0
|
|
|
|
|
* @author soui
|
|
|
|
|
* @date 2014-07-02
|
|
|
|
|
*
|
|
|
|
|
* Describe 热键控件
|
|
|
|
|
*/
|
|
|
|
|
#pragma once
|
|
|
|
|
#include "core/SWnd.h"
|
|
|
|
|
#include "core/SAccelerator.h"
|
|
|
|
|
|
|
|
|
|
namespace SOUI
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* @class SHotKeyCtrl
|
|
|
|
|
* @brief 热键控件
|
|
|
|
|
*
|
|
|
|
|
* Describe 热键控件
|
|
|
|
|
*/
|
|
|
|
|
class SOUI_EXP SHotKeyCtrl
|
|
|
|
|
: public SWindow
|
|
|
|
|
, public SAccelerator
|
|
|
|
|
{
|
|
|
|
|
SOUI_CLASS_NAME(SHotKeyCtrl, L"hotkey")
|
|
|
|
|
enum{
|
|
|
|
|
Mod_SC = Mod_Shift|Mod_Ctrl,
|
|
|
|
|
Mod_SA = Mod_Shift|Mod_Alt,
|
|
|
|
|
Mod_CA = Mod_Ctrl|Mod_Alt,
|
|
|
|
|
Mod_SCA = Mod_Shift|Mod_Ctrl|Mod_Alt,
|
|
|
|
|
};
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::SHotKeyCtrl
|
|
|
|
|
* @brief 构造函数
|
|
|
|
|
*
|
|
|
|
|
* Describe 构造函数
|
|
|
|
|
*/
|
|
|
|
|
SHotKeyCtrl(void);
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::~SHotKeyCtrl
|
|
|
|
|
* @brief 析构函数
|
|
|
|
|
*
|
|
|
|
|
* Describe 析构函数
|
|
|
|
|
*/
|
|
|
|
|
virtual ~SHotKeyCtrl(void);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::SetRule
|
|
|
|
|
* @brief 设置规则
|
|
|
|
|
* @param WORD wInvalidComp --
|
|
|
|
|
* @param WORD wModifier --
|
|
|
|
|
*
|
|
|
|
|
* Describe 设置规则
|
|
|
|
|
*/
|
|
|
|
|
void SetRule(WORD wInvalidComp, WORD wModifier);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::SetHotKey
|
|
|
|
|
* @brief 设置热键
|
|
|
|
|
* @param WORD vKey --
|
|
|
|
|
* @param WORD wModifiers --
|
|
|
|
|
*
|
|
|
|
|
* Describe 设置热键
|
|
|
|
|
*/
|
|
|
|
|
void SetHotKey(WORD vKey, WORD wModifiers);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::GetHotKey
|
|
|
|
|
* @brief 获取热键
|
|
|
|
|
* @param WORD &vKey --
|
|
|
|
|
* @param WORD wModifiers --
|
|
|
|
|
*
|
|
|
|
|
* Describe 获取热键
|
|
|
|
|
*/
|
|
|
|
|
void GetHotKey(WORD & vKey,WORD &wModifers);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual SStringT GetWindowText(BOOL bRawText = FALSE);
|
|
|
|
|
protected:
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnGetDlgCode
|
|
|
|
|
* @brief 获取窗口消息码
|
|
|
|
|
*
|
|
|
|
|
* Describe 消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
virtual UINT OnGetDlgCode()
|
|
|
|
|
{
|
|
|
|
|
return (SC_WANTALLKEYS|SC_WANTSYSKEY) & (~SC_WANTTAB);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnLButtonDown
|
|
|
|
|
* @brief 左键按下事件
|
|
|
|
|
* @param UINT nFlags -- 标志
|
|
|
|
|
* @param CPoint point -- 鼠标坐标
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnLButtonDown(UINT nFlags,CPoint pt);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnPaint
|
|
|
|
|
* @brief 绘制消息
|
|
|
|
|
* @param IRenderTarget *pRT -- 渲染目标
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnPaint(IRenderTarget *pRT);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnSetFocus
|
|
|
|
|
* @brief 设置焦点
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnSetFocus(SWND wndOld);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnKillFocus
|
|
|
|
|
* @brief 失去焦点
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnKillFocus(SWND wndFocus);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnKeyDown
|
|
|
|
|
* @brief 键盘按下事件
|
|
|
|
|
* @param UINT nChar -- 按键对应的码值
|
|
|
|
|
* @param UINT nRepCnt -- 重复次数
|
|
|
|
|
* @param UINT nFlags -- 标志
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnKeyUp
|
|
|
|
|
* @brief 键盘抬起事件
|
|
|
|
|
* @param UINT nChar -- 按键对应的码值
|
|
|
|
|
* @param UINT nRepCnt -- 重复次数
|
|
|
|
|
* @param UINT nFlags -- 标志
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnSysKeyDown
|
|
|
|
|
* @brief 系统按键按下事件
|
|
|
|
|
* @param UINT nChar -- 按键对应的码值
|
|
|
|
|
* @param UINT nRepCnt -- 重复次数
|
|
|
|
|
* @param UINT nFlags -- 标志
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SHotKeyCtrl::OnSysKeyUp
|
|
|
|
|
* @brief 系统按键抬起事件
|
|
|
|
|
* @param UINT nChar -- 按键对应的码值
|
|
|
|
|
* @param UINT nRepCnt -- 重复次数
|
|
|
|
|
* @param UINT nFlags -- 标志
|
|
|
|
|
*
|
|
|
|
|
* Describe 此函数是消息响应函数
|
|
|
|
|
*/
|
|
|
|
|
void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
|
|
|
|
|
|
|
|
void UpdateModifier();
|
|
|
|
|
|
|
|
|
|
void UpdateCaret(IRenderTarget *pRT);
|
|
|
|
|
|
|
|
|
|
UINT GetTextAlign();
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
HRESULT OnAttrInvalidComb(const SStringW & value, BOOL bLoading);
|
|
|
|
|
HRESULT OnAttrInvalidModifier(const SStringW & value, BOOL bLoading);
|
|
|
|
|
HRESULT OnAttrHotKey(const SStringW & value, BOOL bLoading);
|
|
|
|
|
SOUI_ATTRS_BEGIN()
|
|
|
|
|
ATTR_CUSTOM(L"invalidComb",OnAttrInvalidComb)
|
|
|
|
|
ATTR_CUSTOM(L"invalidModifier",OnAttrInvalidModifier)
|
|
|
|
|
ATTR_CUSTOM(L"hotKey",OnAttrHotKey)
|
|
|
|
|
SOUI_ATTRS_END()
|
|
|
|
|
|
|
|
|
|
SOUI_MSG_MAP_BEGIN()
|
|
|
|
|
MSG_WM_PAINT_EX(OnPaint)
|
|
|
|
|
MSG_WM_LBUTTONDOWN(OnLButtonDown)
|
|
|
|
|
MSG_WM_SETFOCUS_EX(OnSetFocus)
|
|
|
|
|
MSG_WM_KILLFOCUS_EX(OnKillFocus)
|
|
|
|
|
MSG_WM_KEYDOWN(OnKeyDown)
|
|
|
|
|
MSG_WM_KEYUP(OnKeyUp)
|
|
|
|
|
MSG_WM_SYSKEYDOWN(OnSysKeyDown)
|
|
|
|
|
MSG_WM_SYSKEYUP(OnSysKeyUp)
|
|
|
|
|
SOUI_MSG_MAP_END()
|
|
|
|
|
WORD m_wInvalidComb; /**< 无效的组合键 */
|
|
|
|
|
WORD m_wInvalidModifier; /**< 对无效组合键的替换方案,默认方案 */
|
|
|
|
|
|
|
|
|
|
BOOL m_bInSetting; /**< 正在设置中 */
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
//namespace SOUI
|