📄 hotkeydlg.cpp
字号:
// HotKeyDlg.cpp : implementation file
//
#include "stdafx.h"
#include "HotKey.h"
#include "HotKeyDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHotKeyDlg dialog
CHotKeyDlg::CHotKeyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHotKeyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CHotKeyDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CHotKeyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHotKeyDlg)
DDX_Control(pDX, IDC_EDIT, m_ctrlEdit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CHotKeyDlg, CDialog)
//{{AFX_MSG_MAP(CHotKeyDlg)
ON_WM_KEYDOWN()
ON_WM_KEYUP()
ON_WM_CHAR()
ON_WM_ACTIVATE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_HOTKEY, OnHotKey)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHotKeyDlg message handlers
void CHotKeyDlg::OutMessage(LPCTSTR szMessage)
{
m_ctrlEdit.SetSel(-1, -1);
m_ctrlEdit.ReplaceSel(szMessage);
}
BOOL CHotKeyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
RegisterHotKeys();
return FALSE; // return TRUE unless you set the focus to a control
}
void CHotKeyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString strMessage;
strMessage.Format(_T("WM_KEYDOWN: nChar: 0x%x, \r\n\tnRepCnt: 0x%x, nFlags: 0x%x\r\n"),
nChar, nRepCnt, nFlags);
OutMessage(strMessage);
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CHotKeyDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString strMessage;
strMessage.Format(_T("WM_KEYUP: nChar: 0x%x, \r\n\tnRepCnt: 0x%x, \r\n\tnFlags: 0x%x\r\n"),
nChar, nRepCnt, nFlags);
OutMessage(strMessage);
CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
LRESULT CHotKeyDlg::OnHotKey(WPARAM wParam, LPARAM lParam)
{
int idHotKey = (int) wParam;
UINT fuModifiers = (UINT) LOWORD(lParam);
UINT uVirtKey = (UINT) HIWORD(lParam);
CString strMessage;
strMessage.Format(_T("WM_HOTKEY: idHotKey: 0x%x, \r\n\tfuModifiers: 0x%x, \r\n\tuVirtKey: 0x%x\r\n"), idHotKey, fuModifiers, uVirtKey);
OutMessage(strMessage);
static BOOL bPressed = FALSE;
if (!bPressed) {
OutMessage(_T("Simulating OnKeyDown...\r\n"));
OnKeyDown(uVirtKey, 1, 0);
bPressed = TRUE;
} else {
if (fuModifiers & MOD_KEYUP)
{
OutMessage(_T("Simulating OnKeyUp ...\r\n"));
OnKeyUp(uVirtKey, 1, 0);
bPressed = FALSE;
}
}
return 0;
}
void CHotKeyDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString strMessage;
strMessage.Format(_T("WM_CHAR: nChar: 0x%x, \r\n\nRepCnt: 0x%x, \r\n\tnFlags: 0x%x\r\n"),
nChar, nRepCnt, nFlags);
OutMessage(strMessage);
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
void CHotKeyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
if (nState == WA_ACTIVE || nState == WA_CLICKACTIVE )
RegisterHotKeys();
}
void CHotKeyDlg::RegisterHotKeys()
{
::RegisterHotKey(GetSafeHwnd(), 0x1, MOD_WIN /*| MOD_KEYUP*/, 0xC1);
::RegisterHotKey(GetSafeHwnd(), 0x2, /*MOD_WIN | */MOD_KEYUP, 0xC2);
::RegisterHotKey(GetSafeHwnd(), 0x3, MOD_WIN | MOD_KEYUP, 0xC3);
::RegisterHotKey(GetSafeHwnd(), 0x4, MOD_WIN | MOD_KEYUP, 0xC4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -