반응형
MFC로 프로그램을 짜면 DDX와 DDV라는 것을 들어 볼 것이다.
자 그럼 그것이 무엇인지 간략히 정리해 보려구 한다.
우선 DDX란?
Dialog Data Exchange 의 약자로 ' Exchange : 교환, 주고받음 맞바꿈 ' 으로 컨트롤과 변수간의 데이터 교환으로 보면 되겟다
MFC에서 프로젝트를 생성하면 아래처럼 기본적으로 생성되어 있다.(응용 프로그램 마법사에 의해미리 작성되어 있다.)
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
우리가 간단히 에디트 창을 넣고 마법사로 변수를 등록하면 저 안에 자동으로 코드가 생성되게 된다.
예를 들면 아래 처럼 에디트 창을 넣고 멤버 변수와 연결하게 되면
(에디트 컨트롤에 마우스 우클릭 후 변수 추가를 선택!)
그 다음 아래와 같이 원하는 멤버 변수명( 난 m_edit로..)을 넣고 확인을 누르면 마법사가 알아서 좌좌촥!!!

컨트롤과 데이터의 교환이므로 범주는 Value로, 변수형식은 CString로(에디트컨트롤로 부터 문자열값을 입력받을 것이므로)
설정하였다.
자 그러면 헤더파일과 생성자부분 그리고 DoDataExchange()함수 안에 아래와 같이 우리가 설정한 멤버변수가 아래처럼 깔금히 들어가 있는 모습을 볼 수 있다.
//헤더 파일에 변수가 추가된 모습
.......
public:
// 생성자에서 초기화된 모습
//DoDataExchange() 에 추가된 모습
자 위와 같이 완료되고 나면 이제 m_edit와 에디트컨트롤과는 연결되 완료(?) 됬다고 볼 수 있다.
간단히 테스트를 해보자면 버튼을 하나 달고
그 버튼을 클릭해서 이벤트 발생시 m_edit에 "성공" 이라는 문자열을 넣어보도록 하겠다.
그럼 에디트 컨트롤박스에도 "성공" 이라는 문자가 표기 될것이다.
자..뚝딱뚝딱..!
위에처럼 '눌러보삼' 버튼하나 추가하고
아래 코드 처럼 버튼을 눌렀을때 이벤트 처리함수를 등록하였다.
오잉?? 아무것도 안나타난다...왜왜왜??

ㅋㅋㅋ 당연히 나타나지 않을 것 이다.
데이터를 갱신해줘야지~~`
UpdateData(FALSE); 를 m_edit="성공"; 밑에 넣어주면 아래처럼 에디트 컨트롤에 우리가 지정해둔 문자가 출력되는
모습을 볼 수 있다.

근데 여기서 마지막에 UpdateData에서의 인자로 FALSE와 TRUE의 차이를 모르는 사람이 있는데
인자가 아래와 같으면
FALSE: 변수에 저장된 값을 컨트롤에 새로 갱신하여 표기
TRUE : 컨트롤에 적은 값을 변수에 저장
로 된다고 보면 된다
아...모 DDX 하나 해볼라 했는데 뭐이리 길게...이런..-_-;; 간만에 나도 공부중..으흐흐흐

---------------------------------------------------------------------------------------------------------------
자 그럼 DDV에 대해서 볼까나??
DDV : Dialog Data Validation
Validation -> 입증하다 , 인증하다? 여기서는 유효성의 의미로 보면 될듯하다.
즉 데이터의 유효성을 검사하는 것!!
만약에 변수나 문자열에 범위를 제한하지 않으면 많은 문제가 발생 할 것이다.
예를 들어 이름을 입력하는 란에 100글자가 넘도록 넣는다던지 1~100까지 만 넣어야 하는곳에 엉뚱한 200, -100 , 이러한
값을 넣는다면??
물론 들어온 값을 확인하여 예외 처리 하는 방법도 있겠지만 DDV 서비스가 이런한 부분을 지원하므로 유용하게 사용 할 수
있다
자 그럼 에디트 컨트롤 을 하나 더 만들고 아래그림 처럼 최대 문자수를 지정해줘 보자.(난 여기서 4글자로

그럼 아래와 같이 DoDataExchange부분에 코드가 추가된 것을 볼 수 있다 물론 헤더파일과 생성자 부분에 DDX할때 처럼
코드가 추가 되어 있고 말이다.
그리고 새로 추가한 에디트 컨트롤에 문자를 넣어보면 딱! 4자까지만 들어가는 것을 확인 할 수 있다.

자 그럼 위에 추가한 눌러보삼2 버튼을 달고 에디트 컨트롤로 부터 데이터를 가져와 보도록 하자. 아래와 처럼 이벤트 처리 함수를 달고 디버깅을 해서 들어온 데이터를 보면 ...
aaaa라는 값을 가져오는 것을 확인 할 수 있다.
(

자 .. 우리가 변수를 추가 할때 CString이 아닌 int같은 자료형을 선택하면 최대값과 최소값도 설정이 가능하다.
그건 각자하 한번씩 확인해 보면 될듯!!^^
DDX와 DDV에 대해 궁금해 하는 사람이 있다면 이걸보고 어느 정도 이해했으면 좋겠다!!!
정보는 쭈욱~~ 공유되어야 한다!! 반드시!!

반응형
댓글