본문 바로가기

API / MFC/Function Information

CWnd::UpdateData()


컨트롤에 있는 값을 가지고 올 때나
컨트롤에 입력을 시키고 싶을 때 사용하는 함수


//afxwin.h
class CWnd : public CCmdTarget
{
	.......................
public:
	BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
	.......................
};



BOOL bSaveAndValidate = TRUE;
=> 다이얼로그 박스의 초기화(FALSE)또는 데이터를 가져올지(TRUE)를 나타내는 플래그

매개변수의 값

TRUE : 컨트롤에 있는 값을 가지고 옮
FALSE : 컨트롤에 값을 입력 시킴

모든 변수가 UpdateData()함수를 사용할 수 있는 것은 아닙니다.
이 함수는 컨트롤과 연결이 된 변수만이 사용을 할 수 있습니다.

보통 리소스에서 컨트롤을 만들고 그 컨트롤을 클릭하여
변수를 추가하였을 경우에는 자동적으로
생성된 변수와 컨트롤이 연결이 되어 있지만,
그렇지 않을 경우에는 직접 연결을 시켜줘야 합니다.

소스 중에서

DoDataExchange()함수가 있을 것인데, 여기에서
연결시켜주는 함수를 적어 주면 됩니다.

적는 방법은
DDX(CDataExchange 객체의 주소, 컨트롤 ID, 변수명);

이렇게 적어 주면 됩니다.

여기서 DDX는 DoDataExchange를 나타 냅니다.
이렇게 연결을 시켜 두면 이제 UpdateData()함수를 사용하여
값을 입력시키거나 가져올 수 있습니다.

그럼 예제소스를 보면서 어떻게 되는지 확인을 해 보겠습니다.
/**********************************************************
                               헤더파일(.h)
**********************************************************/
class CupdateDlg : public CDialog
{
	.........................
protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 지원입니다.


protected:
	HICON m_hIcon;

	// 생성된 메시지 맵 함수
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CString up;
	afx_msg void OnBnClickedButton1();
};
/**********************************************************
                               cpp파일(.cpp)
**********************************************************/
.........................

void CupdateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, up);
}

.........................
void CupdateDlg::OnBnClickedButton1()
{
	CString a(_T(""));

	UpdateData(TRUE);
	a.Format(_T("%s"), up);
	AfxMessageBox(a);

	up.Format(_T("test"));
	UpdateData(FALSE);
}

.........................

결과화면을 보면,


먼저 Edit Control에 button이라고 입력을 합니다. 그리고나서 버튼 컨트롤을 클릭을 하면
	UpdateData(TRUE);
	a.Format(_T("%s"), up);
	AfxMessageBox(a);

이 소스의 결과로 밑 화면처럼 Edit Control에 있는 값을 가져와서 메세지 박스로 출력을 시켰습니다.


출력을 시킨뒤 이 박스를 확인을 눌러 없애면,
	up.Format(_T("test"));
	UpdateData(FALSE);

이 소스의 결과로 밑 화면처럼 Edit Control에 입력된 값이 바뀌게 됩니다.


주로 이렇게 사용을 할 때 UpdateData() 함수를 사용을 합니다.


참조 :
http://msdn.microsoft.com/ko-kr/library/t9fb9hww(VS.80).aspx

'API / MFC > Function Information' 카테고리의 다른 글

CFileFind Class  (0) 2010.03.23
CFileDialog 생성자 함수(CFileDialog::CFileDialog)  (0) 2010.03.10
윈도우 ID 값 추출(GetDlgCtrlID())  (0) 2010.03.08
CDC::BitBlt  (0) 2010.03.08
CARRAY CLASS  (0) 2010.03.08