WM_HOTKEY并不包含在Class Wizard中,如果要设置这个消息,必须手工添加。假设Project的名字是Temp,那么操作如下: 1、在TempView.h文件中消息映射的说明处加入热键消息处理函数的声明。 //{{AFX_MSG(CTempView) afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnDestroy(); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); //}}AFX_MSG LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//此句为加入内容,声明热键消息处理函数。 DECLARE_MESSAGE_MAP()
2、 接着在TempView.cpp中消息映射的定义处是用消息映射宏指定热键消息WM_HOTKEY的消息处理函数。 BEGIN_MESSAGE_MAP(CTempView, CView) //{{AFX_MSG_MAP(CTempView) ON_WM_CHAR() ON_WM_DESTROY() ON_WM_CREATE() ON_WM_KEYDOWN() ON_WM_KEYUP() ON_WM_HSCROLL() ON_WM_KILLFOCUS() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() //}}AFX_MSG_MAP ON_MESSAGE(WM_HOTKEY,OnHotKey) //此句为手工加入内容,指定了热键消息的处理函数。 END_MESSAGE_MAP() 3、在 OnCreate()函数中登记热键[*]。 int CTempView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here ::RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'*');//登记热键 return 0; } 4、在TempView.cpp中编写OnHotKey()函数,当按下热键[*]时程序变为前台,并跳出一个消息框。 LRESULT CTempView::OnHotKey(WPARAM wParam,LPARAM lParam) { if(wParam==1001) MessageBox("I have been activated!!"); return 0; } 5、注销热键,释放系统资源. void CTempView::OnDestroy() { CView::OnDestroy(); // TODO: Add your message handler code here UnregisterHotKey(m_hWnd,1001);//注销热键,释放系统资源.
} 
|