이것이 제가 하는 일입니다. 기본 프로젝트 대화 상자에 CEdit 및 CButton을 추가합니다. 즉, 편집 상자에 포커스가 있을 때 내용을 입력한 다음 Enter를 누르면 포커스가 버튼으로 이동합니다. 버튼을 누르면 CEdit 서브클래스의 OnKillFocus 함수가 동시에 호출되는데... 구체적인 내용은 다음과 같습니다.
1. 파생 클래스인 CBaseEdit을 CEdit에 추가합니다. OnKillFocus() 함수
2. OnKillFocus에 대해 다음 코드를 작성합니다:
#include "TestDlg.h" //현재 기본 대화 상자를 CBaseEdit의 상위 창으로 만듭니다. 피><피>. . .
void CBaseEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
// TODO : 여기에 메시지 처리기 코드를 추가하세요.
MessageBox("CEdit의 OnKillFocus 함수가 호출되었습니다!");
CTestDlg * parent = (CFocusDlg*)GetParent();//포인터 만들기 부모 창의 개체
CString str;
GetWindowText(str);
parent->m_str = str;//현재 편집 상자의 내용 할당 메인 대화 상자 클래스 멤버 변수 m_str
parent->m_btn.SetFocus();
}
3. 메인 대화 상자 CTestDlg 클래스에서 is 버튼 메시지 응답 기능 추가
#include "BaseEdit.h"
CString m_str;
CButton m_btn;
CBaseEdit m_edit; < /p>
. . .
void CTestDlg::OnButton1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가하세요.
MessageBox(m_str );
}
5. 기본 대화 상자 클래스에 PreTranslateMessage 메시지 응답 기능을 추가합니다.
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 여기에 특수 코드를 추가하거나 기본 클래스를 호출합니다.
if(pMsg==NULL) return false;
< p> const HWND hwnd=pMsg->hwnd;if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==13){
SetTheFocus();//이것을 누르세요 Enter 키를 누르면 함수가 호출됩니다.
}
return CDialog::PreTranslateMessage(pMsg);
}
6. the main 대화 상자 클래스에 사용자 정의 함수 SetTheFocus 추가
void CTestDlg::SetTheFocus()
{
HWND hwnd=::GetFocus();< /p >
int iID=::GetDlgCtrlID(hwnd);
switch(iID)//현재 포커스가 있는 컨트롤 확인
{
케이스 IDC_EDIT1 :
m_btn.SetFocus();
중단;
케이스 IDC_BUTTON1:
::PostMessage(this-> GetSafeHwnd() ,WM_COMMAND,iID,(UINT)hwnd);
break;
}
}
리눅스 RH 9.0 리 KDM, 그놈, GNOME, KDE 구체적인 의미. 감사합니다