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;

}

}