본문 바로가기
C & C++/C & C++

[MFC] UpdateData(TRUE) or UpdateData(FALSE) 구분하여 사용하기

by izen8 2011. 2. 11.
반응형

1. 언제 사용할까?

   - UpdateData( ) 함수는 말 그대로 데이터를 업데이트 할 때 사용하는 함수

 

2. 사용 방법

   - 컨트롤에 있는 값을 변수로 넣어 갱신하고 싶을 때에는 UpdateData(TURE) 사용

   - 변수에 있는 값을 컨트롤에 넣어 갱신하고 싶을 때에는 UpdateData(FALSE) 사용

 

3. 어떻게 저렇게 쓸수 있게 되는 걸까?

   - 그냥 무조건 갱신되는게 아니다!

      전제 조건으로 어떤 변수가 어떤 컨트롤과 연결되어 있는지에 대하여 먼저 이야기를 해야지 알 수 있다.

      그래서 DDX(DoDataExchange)에 보면 어떤 컨트롤 ID가 어떤 변수와 연결되어져 있는지 미리 선언해 놓았다.

      그래서 UpdateData 함수가 호출되면 서로 간의 값 교환이 일어 난다.
      단, 매개변수가 TRUE면 컨트롤의 값이 변수로 가고, FALSE면 변수의 값이 컨트롤로 가게 되는 것이다.

 

4. UpdateData(TRUE)를 언제 쓸까?

   - OK 버튼과 Cancel 버튼을 생각해 보자!

   - 윈도우에서 제어판으로 세팅을 할 경우에 여러 가지 값들을 막 조작하다가 저장할 꺼면 확인(OK) 버튼을 누르고,
      그렇지 않을 경우에는 취소(Cancel) 버튼을 누르게 된다. 이때, OK 버튼을 눌렀을 경우 다이얼로그에 기록된 데이터를
      실제 데이터로 사용하기 때문에 그 값에 의하여 세팅이 변경 되지만, Cancel 버튼을 눌렀을 경우에는 다이얼로그에
      있던 값을 저장하지 않은 채 그냥 닫아 버린다. 따라서 이때는 OK 버튼을 눌렀을 경우 UpdateData(TRUE) 함수를 수행한다.

 

5. UpdateData(FALSE)를 언제 쓸까?

   - 새로운 Dialog 박스가 뜰 때 컨트롤 안에 값들이 미리 채워져 있다!

   - 프로그램에서 뭔가 버튼을 눌러서 새로운 Dialog 박스 창을 화면에 뛰울 경우에는 이미 값들이 들어 있다.

      예를 들어 해상도 변경을 하려고 제어판에서 디스플레이 속성 창을 열어 보면 현재 해상도가 나타나져 있다.

      이런 값들은 이미 데이터로 어딘가에 존재하는데 그 데이터를 불러와서 화면에 표시해 주는 것이다.

      따라서 새로운 대화상자(Dialog)가 열릴 때면 UpdateData(FALSE)를 수행해 주면 된다.

 

번외 : 보통 DDX 밑에 보면 BEGIN_MESSAGE_MAP이 쓰여져 있는데,

         이게 바로 컨트롤에 대하여 어떤 이벤트가 발생할 경우 어떤 함수가 실행되는지에 대하여 기술해 놓은 것이다.

         예를 들어 ON_BTN_CLICKED(IDC_BTN_SET, OnBtnSet) 이란 메시지가 있다면,

         세팅을 위한 버튼을 클릭하였을 경우 OnBtnSet이라는 함수가 실행되어지도록 연결지어 둔 것이다.

         컴퓨터는 안 가르쳐 주면 지 스스로 대충 이거겠지~ 라는 판단을 할 수 없으므로,
         사용자가 처음에 미리 잘 가르쳐 주지 않으면 어벙하게 동작할 수 있으므로 이런 점을 유의해야 한다.

반응형

댓글