본문 바로가기
나머지/IT개발.잡다한것.

[MFC] Updatadata()

by 무늬만학생 2012. 11. 1.
반응형

※ UpdateData 함수를 이용한 데이터 전송
UpdateData 함수는 매개변수를 이용하여 양방향 전송을 제어합니다.
아래의 그림에 보인 바와 같이 UpdateData 함수의 매개변수로 TRUE를 주면
사용자가 컨트롤에 입력한 값이 Value형 멤버 변수로 전송되고,
UpdateData 함수의 매개변수로FALSE를 주면 Value형 멤버 변수에 설정되어 있는 값이
컨트롤로 전송되어 이 값이 화면에 출력 됩니다.

※ CDialog 클래스에서 기본적으로 호출하고 있는 UpdateData 함수
CDialog 클래스에서는 프로그래머들의 편의를 위해, 기본적으로 UpdateData 함수를 두 번 호출해 주고 있습니다.
OnInitDialog 함수 안에서 UpdateData(FALSE)를 호출해주고, OnOK 함수 안에서 UpdateData(TRUE)를 호출해줍니다.
CDialog 클래스는 왜 이러한 일을 해 주고 있을까요?

  • 대화상자 시작 시 UpdateData(FALSE) 호출
    OnInitDialog 함수는 대화상자를 초기화 하기 위해 호출되는 함수입니다.
    이때, UpdateData(FALSE)가 호출되면, Value형 멤버 변수에 설정된 값이 컨트롤로 전송되어 화면에 나타나게 됩니다.
    즉, 대화상자가 화면에 나타나는 순간에 Value형 멤버 변수에 설정된 초기값이 화면에 출력되는 것이지요.
  • 대화상자 종료 시 UpdateData(TRUE) 호출
    OnOK 함수는 입력을 마치고 대화상자가 종료될 때 호출되는 함수입니다.
    이때, UpdateData(TRUE)가 호출되면, 사용자가 컨트롤에 입력해 놓은 값이 Value형 멤버 변수에 저장됩니다.

주의
대화상자를 처리할 때 주의할 점은 사용자가 컨트롤에 입력한 값과 이 컨트롤에 연결된 Value형 멤버 변수에
저장된 값이 항상 같은 상태로 유지되는 것은 아니라는 점입니다. 즉, 사용자가 컨트롤에 어떤 값을 입력하면
컨트롤에 입력된 값은 변경되지만, 이 값이 바로 Value형 멤버 변수에 반영되는 것은 아니라는 것입니다.
UpdateData(TRUE)를 호출하고 난 다음에야 비로소, 컨트롤에 입력된 값이 Value형 멤버 변수에 저장됩니다.
물론, OnOK 함수에서 UpdateData(TRUE)가 호출되고 있으므로 확인 버튼을 눌러 대화상자가 종료된 후에는
컨트롤에 입력되었던 값이 Value형 멤버 변수에 저장된 상태가 됩니다.
하지만, 만약 그 전에 컨트롤에 입력된 값을 Value형 멤버 변수에 반영되도록 하고 싶으면 UpdateData(TRUE)를 명시적으로 호출해 주어야 합니다.


출처 : http://kmdigit.egloos.com/3132286

MSDN : http://msdn.microsoft.com/en-us/library/t9fb9hww(v=vs.80).aspx

유용한 정보 얻으셨으면 아래 광고나 손가락 클릭해주세요~  (로그인 불필요합니다)

반응형