VC6.0环境下,对话框内可以使用热键,
在单文档程序中想接收组合键"ALT+X"消息,
testHotKey.h和testHotKey.cpp是对话框程序中正常使用的代码;
CKeyView.h和CKeyView.cpp,是单文档程序中代码,
感觉GetKeyState使用有点问题,
请大家帮忙看下,谢谢!/****** testHotKey.h ******/
public:
virtual BOOL DestroyWindow();
protected:
afx_msg void OnHotKey(WPARAM wp,LPARAM lp);/****** testHotKey.cpp ******/
ON_MESSAGE(WM_HOTKEY,OnHotKey)/*注册热键*/
BOOL CtestHotKeyDlg::OnInitDialog()
{::RegisterHotKey(m_hWnd,199,MOD_ALT,'X');}void CtestHotKeyDlg::OnHotKey(WPARAM wp,LPARAM lp)
{ /*收到Alt+X组合键信息,处理业务逻辑*/
if(wp==199)
{//处理业务逻辑
}
}
BOOL CtestHotKeyDlg::DestroyWindow()
{ /*释放热键*/
::UnregisterHotKey(m_hWnd,199);
return CDialog::DestroyWindow();
}
//////////////////////////////////////////////////////////
/****** CKeyView.h ******/
protected:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);/****** CKeyView.cpp ******/
//{{AFX_MSG_MAP(CKeyView)
ON_WM_CHAR()
//}}AFX_MSG_MAPvoid CKeyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{ /*接收组合键消息,处理业务逻辑*/
CKeyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
/*感觉检查Ctrl是否被按下,有点问题???*/
if ((int)GetKeyState(VK_CONTROL) < 0)
{ if (nChar == 'X')
{ /*处理业务逻辑*/ }
}
CView::OnChar(nChar, nRepCnt, nFlags);
Invalidate();
}
在单文档程序中想接收组合键"ALT+X"消息,
testHotKey.h和testHotKey.cpp是对话框程序中正常使用的代码;
CKeyView.h和CKeyView.cpp,是单文档程序中代码,
感觉GetKeyState使用有点问题,
请大家帮忙看下,谢谢!/****** testHotKey.h ******/
public:
virtual BOOL DestroyWindow();
protected:
afx_msg void OnHotKey(WPARAM wp,LPARAM lp);/****** testHotKey.cpp ******/
ON_MESSAGE(WM_HOTKEY,OnHotKey)/*注册热键*/
BOOL CtestHotKeyDlg::OnInitDialog()
{::RegisterHotKey(m_hWnd,199,MOD_ALT,'X');}void CtestHotKeyDlg::OnHotKey(WPARAM wp,LPARAM lp)
{ /*收到Alt+X组合键信息,处理业务逻辑*/
if(wp==199)
{//处理业务逻辑
}
}
BOOL CtestHotKeyDlg::DestroyWindow()
{ /*释放热键*/
::UnregisterHotKey(m_hWnd,199);
return CDialog::DestroyWindow();
}
//////////////////////////////////////////////////////////
/****** CKeyView.h ******/
protected:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);/****** CKeyView.cpp ******/
//{{AFX_MSG_MAP(CKeyView)
ON_WM_CHAR()
//}}AFX_MSG_MAPvoid CKeyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{ /*接收组合键消息,处理业务逻辑*/
CKeyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
/*感觉检查Ctrl是否被按下,有点问题???*/
if ((int)GetKeyState(VK_CONTROL) < 0)
{ if (nChar == 'X')
{ /*处理业务逻辑*/ }
}
CView::OnChar(nChar, nRepCnt, nFlags);
Invalidate();
}
{
if(nChar == _T('X')
{
....
}
}
/*按下组合键时,字符消息接收有问题???*/
void CTest0819View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
int k = -1;
if(GetKeyState(VK_CONTROL) & 0x8000)
{
/* 按下字母e(小写),nChar = 101 , k = -1
按下"Ctrl+e"组合键,nChar = 5 , k = -1
*/
if(nChar == 'e')
{ k =111; }
}
CView::OnChar(nChar, nRepCnt, nFlags);
}
if(nChar == 'e')
if(nChar == 'E')
if(nChar == _T('e'))
if(nChar == _T('E'))
修改成if(nChar == 5),应该可以了
{
if(GetKeyState(VK_CONTROL) & 0x8000)
{
if(nChar == 2) /*Ctrl+b*/
{ AfxMessageBox("2222");
}
else if(nChar == 5) /*Ctrl+e*/
{ AfxMessageBox("5555");
}
else if (nChar == 9) /*Ctrl+i*/
{
AfxMessageBox("9999");
}
}
CView::OnChar(nChar, nRepCnt, nFlags);
}