用回车键改变输入焦点,最后焦点到 添加按钮 上时,希望执行添加操作,不知如何实现????请各位大哥帮忙看看这段代码:
void COtherPropertyDlg::OnOK() 
{
if(GetDlgItem(IDC_EDIT_POSITION)->GetFocus())
{
//选择文本框内所有的文本
SendDlgItemMessage(IDC_EDIT_POSITION,EM_SETSEL,0,-1);
}

if(GetDlgItem(IDC_EDIT_OFFSET)->GetFocus())
{
//选择文本框内所有的文本
SendDlgItemMessage(IDC_EDIT_OFFSET,EM_SETSEL,0,-1);
}
if(GetDlgItem(IDC_EDIT_CHARACTERISTIC)->GetFocus())
{
//选择文本框内所有的文本
SendDlgItemMessage(IDC_EDIT_CHARACTERISTIC,EM_SETSEL,0,-1);
}
if(GetDlgItem(IDC_BTN_ADD)->GetFocus())
{
//如果焦点在添加特性按钮上,执行添加操作
OnBtnAdd();
}
//焦点在控件之间移动
GetNextDlgTabItem(GetFocus())->SetFocus();
}

解决方案 »

  1.   

    在PreTranslateMsg里面自己处理回车消息,然后发送一个tab的消息。
      

  2.   

    同上
    如果只要回车改变焦点
    PreTranslateMessage(MSG* pMsg){
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
    pMsg->wParam=VK_TAB
    ...
    }
      

  3.   

     BOOL XXModuleDlg::PreTranslateMessage(MSG *pMsg)
    {
         CString  str;  
         if ( pMsg->message == WM_KEYDOWN )
               {
                    switch(pMsg->wParam)
                    {
                    case VK_ESCAPE:
                     return TRUE; //直接返回TRUE
                     break;
                    case VK_RETURN:
    UpdateData();
                    CEdit  *pEdit  =  (CEdit*)m_ctrlFactoryCombo.GetWindow(GW_CHILD);  
                     if(pMsg->hwnd  ==  pEdit->m_hWnd  )  
                       {              
                         m_ctrlFactoryCombo.GetWindowText(str);  
                         m_ctrlFactoryCombo.AddString(str);  
                        };
                  return TRUE;
                    break;
                    }
               }
           return CDialog::PreTranslateMessage(pMsg);
               

    }
      

  4.   

    我上面的程序断 现在运行时  每按一次回车焦点改变后,OnBtnAdd()函数都会被执行一次,这是不对的。我希望是我输入一组数据后,当焦点到达 添加按钮 上时才输入数据。
      

  5.   

    PreTranslateMessage中判断那个按钮的焦点状态,如果有焦点存储数据,如果没有焦点发'\t'的WM_CHAR
      

  6.   

    顶3楼
    PreTranslateMsg 函数中处理就可以了