一个窗口内建立几个Edit窗口(CEdit的派生内),小弟我想让按下回车键后让焦点自动移到下
一个窗口内建立几个Edit窗口(CEdit的派生内),我想让按下回车键后让焦点自动移到下
一个窗口内建立几个Edit窗口(CEdit的派生类),我想让按下回车键后让焦点自动移到下一个编缉框,我重载了OnChar,OnKeyDown,OnKeyUp对其进行处理,可是不知为什么,英文输入时按我期望的运行了,但当打开中文输入法时,就不行了!我在一个类中定义了几个Edit变量,并定义了相应的字串变量,当某编辑框失去焦点时,向该类的父窗口发送一个消息通知变量存贮CEdit的文字进相应变量中!
高手告诉我这是为什么呀?
------解决方案--------------------
输入法是智能ABC?
在多按一次回车试试?
------解决方案--------------------
对,多按一次回车。
第一次回车被输入法拦截并处理了。
------解决方案--------------------
按下回车键后让焦点自动移到下一个编缉框
——通用的方法是这样实现:
1,重载PreTranslateMessage,处理回车消息
BOOL CTestForm::PreTranslateMessage(MSG* pMsg)
{
if(pMsg-> message == WM_KEYDOWN) // WM_KEYUP
if (pMsg-> wParam == VK_RETURN)
{
OnEnterSetFocus();
return TRUE;
}
return CTestForm::PreTranslateMessage(pMsg);
}
2,实现回车时焦点转移到下一个EDIT控件。
void CTestForm::OnEnterSetFocus()
{
CWnd *pCtrl = CWnd::GetFocus();
if (pCtrl-> m_hWnd == m_hWnd)
{
pCtrl = NULL;
}
CWnd *pNext = GetNextDlgTabItem(pCtrl);//要求编缉框的TAB顺序是连续的
if (pNext != NULL)
{
//int nID = pNext-> GetDlgCtrlID();
//TRACE2( "This: %d -> Next: %d\n ", pCtrl-> GetDlgCtrlID(), nID);
if(pNext-> IsKindOf(RUNTIME_CLASS(CEdit)))
pNext-> SetFocus();
}
}
如果EDIT控件的TAB顺序不是连续的,就稍麻烦一点,用一个循环,直到找到下一个EDIT控件为止.
------解决方案--------------------
BOOL CTestForm::PreTranslateMessage(MSG* pMsg)
{
if (pMsg-> wParam == VK_RETURN)
{
GetNextDlgTabItem(GetFocus())-> SetFocus();
return TRUE;
}
return CTestForm::PreTranslateMessage(pMsg);
}
------解决方案--------------------
楼上的方法比较好,我就是这样用的。
一个窗口内建立几个Edit窗口(CEdit的派生类),我想让按下回车键后让焦点自动移到下一个编缉框,我重载了OnChar,OnKeyDown,OnKeyUp对其进行处理,可是不知为什么,英文输入时按我期望的运行了,但当打开中文输入法时,就不行了!我在一个类中定义了几个Edit变量,并定义了相应的字串变量,当某编辑框失去焦点时,向该类的父窗口发送一个消息通知变量存贮CEdit的文字进相应变量中!
高手告诉我这是为什么呀?
------解决方案--------------------
输入法是智能ABC?
在多按一次回车试试?
------解决方案--------------------
对,多按一次回车。
第一次回车被输入法拦截并处理了。
------解决方案--------------------
按下回车键后让焦点自动移到下一个编缉框
——通用的方法是这样实现:
1,重载PreTranslateMessage,处理回车消息
BOOL CTestForm::PreTranslateMessage(MSG* pMsg)
{
if(pMsg-> message == WM_KEYDOWN) // WM_KEYUP
if (pMsg-> wParam == VK_RETURN)
{
OnEnterSetFocus();
return TRUE;
}
return CTestForm::PreTranslateMessage(pMsg);
}
2,实现回车时焦点转移到下一个EDIT控件。
void CTestForm::OnEnterSetFocus()
{
CWnd *pCtrl = CWnd::GetFocus();
if (pCtrl-> m_hWnd == m_hWnd)
{
pCtrl = NULL;
}
CWnd *pNext = GetNextDlgTabItem(pCtrl);//要求编缉框的TAB顺序是连续的
if (pNext != NULL)
{
//int nID = pNext-> GetDlgCtrlID();
//TRACE2( "This: %d -> Next: %d\n ", pCtrl-> GetDlgCtrlID(), nID);
if(pNext-> IsKindOf(RUNTIME_CLASS(CEdit)))
pNext-> SetFocus();
}
}
如果EDIT控件的TAB顺序不是连续的,就稍麻烦一点,用一个循环,直到找到下一个EDIT控件为止.
------解决方案--------------------
BOOL CTestForm::PreTranslateMessage(MSG* pMsg)
{
if (pMsg-> wParam == VK_RETURN)
{
GetNextDlgTabItem(GetFocus())-> SetFocus();
return TRUE;
}
return CTestForm::PreTranslateMessage(pMsg);
}
------解决方案--------------------
楼上的方法比较好,我就是这样用的。