注册热键及使用方法

来源:互联网 发布:ios 网络图片尺寸 编辑:程序博客网 时间:2024/05/21 09:52

作者:古典小说网

头条:讨厌编程  、 古典古韵古典小说

作品:快乐课堂软件、任性动图软件、古典小说大全




定义

HACCEL m_hAccelerator;// 加速键结构体int HotKeyID1;//热键事件ID,动态生成,如觉得没必要,可设置一固定整数。

LONG OnHotKey(WPARAM wParam, LPARAM lParam);


初始化

m_hAccelerator = NULL;HotKeyID1 = 0;         {m_hAccelerator = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME_NEW));//寻找HotKey对应的原子是否存在于原子列表HotKeyID1 = GlobalFindAtom(L"RenxingdongtuHotKey1");//自定义一个原子串,尽量唯一if (HotKeyID1 > 0)//如果存在,GlobalDeleteAtom(HotKeyID1);//则删除全局原子HotKeyID1 = GlobalAddAtom(L"RenxingdongtuHotKey1");//注册全局热键 ctrl + alt + U//RegisterHotKey(GetSafeHwnd(), HotKeyID1, MOD_CONTROL /*| MOD_ALT*/, L'U');RegisterHotKey(GetSafeHwnd(), HotKeyID1, MOD_CONTROL, L'R');}


设置响应函数

ON_MESSAGE(WM_HOTKEY, OnHotKey)


LONG CImportView::OnHotKey(WPARAM wParam, LPARAM lParam){UINT fuModifiers = (UINT)LOWORD(lParam);  // 控制键,ctrl,alt等UINT uVirtKey = (UINT)HIWORD(lParam);     // 键盘码 A,B,C等  //判断响应了什么热键     //ctrl + alt + U 显示主窗体//if ((MOD_CONTROL /*| MOD_ALT*/) == fuModifiers && L'U' == uVirtKey)if ((MOD_CONTROL /*| MOD_ALT*/) == fuModifiers && L'R' == uVirtKey){//CWnd *pWnd = CWnd::FindWindow(NULL, L"RenxingDongtuLuPing");if (/*pWnd&&*/g_nWindowHwnd > 0){CString sCopyData;COPYDATASTRUCT cpd = { 0 };/*cpd.lpData = sCopyData.GetBuffer();cpd.cbData = sCopyData.GetLength();*/cpd.dwData = 0;cpd.cbData = sCopyData.GetLength() * 2 + 1;//多加一个长度,防止乱码cpd.lpData = (void*)sCopyData.GetBuffer(cpd.cbData);HWND hDstWnd = (HWND)g_nWindowHwnd;::SendMessage(hDstWnd, WM_COPYDATA, (WPARAM)m_hWnd, (LPARAM)&cpd);}g_bStartLuping = FALSE;//if (g_nLuping == 2){//m_nKuangjiaMode = 1;SetKuangjiaMode();OnBgMiddle();RedrawWindow();}g_nLuping = 1;//显示主窗体}//else if( MOD_ALT == fuModifiers && 'M' == uVirtKey )   //多热键处理//{   //    AfxMessageBox(_T("你按下了组合键 alt + m"));     //}   //else  //    AfxMessageBox(_T("你按下了未知热键"));return 0;}