반응형
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="성공"; 밑에 넣어주면 아래처럼 에디트 컨트롤에 우리가 지정해둔 문자가 출력되는
모습을 볼 수 있다.
... 자 이로써 DDX와 그에 관련된 간단한 예제까지 진행해 보았다...
근데 여기서 마지막에 UpdateData에서의 인자로 FALSE와 TRUE의 차이를 모르는 사람이 있는데
인자가 아래와 같으면
FALSE: 변수에 저장된 값을 컨트롤에 새로 갱신하여 표기
TRUE : 컨트롤에 적은 값을 변수에 저장
로 된다고 보면 된다
아...모 DDX 하나 해볼라 했는데 뭐이리 길게...이런..-_-;; 간만에 나도 공부중..으흐흐흐
---------------------------------------------------------------------------------------------------------------
자 그럼 DDV에 대해서 볼까나??
DDV : Dialog Data Validation
Validation -> 입증하다 , 인증하다? 여기서는 유효성의 의미로 보면 될듯하다.
즉 데이터의 유효성을 검사하는 것!!
만약에 변수나 문자열에 범위를 제한하지 않으면 많은 문제가 발생 할 것이다.
예를 들어 이름을 입력하는 란에 100글자가 넘도록 넣는다던지 1~100까지 만 넣어야 하는곳에 엉뚱한 200, -100 , 이러한
값을 넣는다면??
물론 들어온 값을 확인하여 예외 처리 하는 방법도 있겠지만 DDV 서비스가 이런한 부분을 지원하므로 유용하게 사용 할 수
있다
자 그럼 에디트 컨트롤 을 하나 더 만들고 아래그림 처럼 최대 문자수를 지정해줘 보자.(난 여기서 4글자로 ..)
그럼 아래와 같이 DoDataExchange부분에 코드가 추가된 것을 볼 수 있다 물론 헤더파일과 생성자 부분에 DDX할때 처럼
코드가 추가 되어 있고 말이다.
(DDX 다음에 DDV_MaxChars가 추가된 모습을 볼 수 있다.)
그리고 새로 추가한 에디트 컨트롤에 문자를 넣어보면 딱! 4자까지만 들어가는 것을 확인 할 수 있다.
자 그럼 위에 추가한 눌러보삼2 버튼을 달고 에디트 컨트롤로 부터 데이터를 가져와 보도록 하자. 아래와 처럼 이벤트 처리 함수를 달고 디버깅을 해서 들어온 데이터를 보면 ...
aaaa라는 값을 가져오는 것을 확인 할 수 있다.
( UpdateData(TRUE) 들어간것 함 보세요!)
자 .. 우리가 변수를 추가 할때 CString이 아닌 int같은 자료형을 선택하면 최대값과 최소값도 설정이 가능하다.
그건 각자하 한번씩 확인해 보면 될듯!!^^
DDX와 DDV에 대해 궁금해 하는 사람이 있다면 이걸보고 어느 정도 이해했으면 좋겠다!!!
정보는 쭈욱~~ 공유되어야 한다!! 반드시!!
반응형
댓글