我有四个单选按钮组,每组两个。本来用TAB键可以切换两组之间的焦点
但是我最后用的小键盘是没有tab键的,所以想用上下键切换两组之间的焦点
重载了PreTranslateMessage函数,当相应的是enter键是可以在不同组见切换,但是换成
上下键就不能切换了 都只能在组内切换
代码如下第一组radio:IDC_CoinOk,IDC_CoinStop
第二组radio:IDC_CashOk,IDC_CashStop开始时焦点在IDC_CoinOk上(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
//如果代码这么写,按ENTER键焦点就切换到IDC_CashOk上
GetDlg(IDC_CashOk)->SetFocus();
return CDialog::PreTranslateMessage(pMsg);
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_DOWN)
{
//如果代码这么写,按向下键键焦点只在IDC_CoinOk和IDC_CoinStop之间切换
GetDlg(IDC_CashOk)->SetFocus();
return CDialog::PreTranslateMessage(pMsg);
}
但是我最后用的小键盘是没有tab键的,所以想用上下键切换两组之间的焦点
重载了PreTranslateMessage函数,当相应的是enter键是可以在不同组见切换,但是换成
上下键就不能切换了 都只能在组内切换
代码如下第一组radio:IDC_CoinOk,IDC_CoinStop
第二组radio:IDC_CashOk,IDC_CashStop开始时焦点在IDC_CoinOk上(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
//如果代码这么写,按ENTER键焦点就切换到IDC_CashOk上
GetDlg(IDC_CashOk)->SetFocus();
return CDialog::PreTranslateMessage(pMsg);
}
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_DOWN)
{
//如果代码这么写,按向下键键焦点只在IDC_CoinOk和IDC_CoinStop之间切换
GetDlg(IDC_CashOk)->SetFocus();
return CDialog::PreTranslateMessage(pMsg);
}
http://www.sunxin.org/forum/thread/24042.html;jsessionid=10E468C2829D13EC46EBF9B461806EE9
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYDOWN == pMsg->message)
{
switch(pMsg->wParam)
{
case VK_DOWN:
pMsg->wParam = VK_TAB;
break;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
{
// TODO: Add your specialized code here and/or call the base class
if(WM_KEYDOWN == pMsg->message)
{
switch(pMsg->wParam)
{
case VK_DOWN:
{
CWnd* pWnd = GetDlgItem(IDC_RADIO1);
ASSERT(pWnd);
CRect rc;
pWnd->GetWindowRect(rc);
CPoint ptCursor;
GetCursorPos(&ptCursor);
CPoint pt(rc.CenterPoint());
ShowCursor(SW_HIDE);
SetCursorPos(pt.x, pt.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, pt.x, pt.y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, pt.x, pt.y ,0, 0);
SetCursorPos(ptCursor.x, ptCursor.y);
ShowCursor(SW_SHOW);
}
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}