seedit
我的做法是这的,在工程主对话框中添加一个CEdit和CButton,意思是当编辑框获得焦点时,输入内容,然后按下回车,焦点转到按钮上,当按钮被按下的那一刻,同时调用了CEdit子类的OnKillFocus函数...以下是具体内容:
1、为CEdit添加一个派生类CBaseEdit,然后添加一个OnKillFocus()函数
2、为OnKillFocus写入以下代码:
#include "TestDlg.h"//把当前主对话框作为CBaseEdit的父窗口
。。。
void CBaseEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
// TODO: Add your message handler code here
MessageBox("CEdit的OnKillFocus函数被调用了!");
CTestDlg * parent = (CFocusDlg*)GetParent();//创建一个父窗口的指针对象
CString str;
GetWindowText(str);
parent->m_str = str;//当前编辑框中的内容赋给主对话框类成员变量m_str
parent->m_btn.SetFocus();
}
3、主对话框CTestDlg类中,为按钮添加消息响应函数
#include "BaseEdit.h"
CString m_str;
CButton m_btn;
CBaseEdit m_edit;
。。。
void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
MessageBox(m_str);
}
5、在主对话框类中添加PreTranslateMessage消息响应函数
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg==NULL) return false;
const HWND hwnd=pMsg->hwnd;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==13){
SetTheFocus();//按下回车键时调用该函数
}
return CDialog::PreTranslateMessage(pMsg);
}
6、在主对话框类添加一个自定义函数SetTheFocus
void CTestDlg::SetTheFocus()
{
HWND hwnd=::GetFocus();
int iID=::GetDlgCtrlID(hwnd);
switch(iID)//判断当前哪个控件获得焦点
{
case IDC_EDIT1:
m_btn.SetFocus();
break;
case IDC_BUTTON1:
::PostMessage(this->GetSafeHwnd(),WM_COMMAND,iID,(UINT)hwnd);
break;
}
}