다이얼로그박스~
엔터 입력시 다이얼로그박스가 종료돼지 않게!!!
엔터입력시 종료되는 이유가
OnOk() 이벤트가 발생해서
CDialog::OnOk() 함수가 호출됨~
일단 다이얼로그 박스에 버튼중에 디폴트 버튼이 있는경우
이런경우가 발생안함
디폴트 버튼에 코딩된 내용에 CDialog::OnOk(); 가 있으면 종료.
1. OK 버튼이 있는경우
OK버튼의 디폴트 버튼 을 해제시킨다.(스타일에서 체크해제)
이때는 자동으로 생성된 코드에서 CDialog::OnOk(); 를 지우면 않됨
2. OK버튼이 없는경우
// Generated message map functions
//{{AFX_MSG(CDictionaryDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK(){} // <--- 이부분을 추가~
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
* 편법
1. 기본적으로 OK버튼을 만들고 OnOK() 메시지 함수를 기본적으로 생성한다..
단 이때 위에서 언급한 내용은 쓰지 않은것으로 가정
2. 그러면 OnOk() 함수가 만들어지고 그 안에 CDialog::OnOk(); 한줄이 자동코딩되어져 있습니다.
3. 그 한줄을 지웁니다....
4. 다이알로그에서 OK 버튼을 지우고 이벤트 메시지 함수는 그대로 둡니다...
5. OnOk() 함수에 약간의 코딩을 해줍니다...무슨 내용이 들어가냐구요?
if(GetFocus() == GetDlgItem(IDC_EDIT1))
{
OnInsertBtn();
}else if(GetFocus() == GetDlgItem(IDC_EDIT2))
{
OnFindBtn();
}
대충 이런내용이 들어가면 됩니다....
무슨 이야기 인즉 EDIT1 에서 엔터를 치면 인서트버튼의 메시지함수를 호출하고,
EDIT2에서 엔터를 치면 파인트버튼의 메시지함수를 호출하고...
대게 이런 연출법을 서브클래싱
* PropertySheet 의 경우~
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN)
{
return 1;
}
}
return CPropertySheet::PreTranslateMessage(pMsg);
}