본문 바로가기

공부/MFC

Visual C++ 2008 MFC Chapter 11 컨트롤 윈도우의 기본

뜬금없지만 고급쪽을 패스하고. 여기로 넘어옴.

책에서의 페이지는 388

프로젝트 제작시에 단일/다중/대화상자기반/다중 최상위 문서 중

대화상자기반 을 클릭하고 다른걸 아무것도 건드리지 않고 마침 을 눌러서 제작.



1. 메뉴에서 보기 -> 도구상자를 클릭하여

Static Text 와 Edit Control 을 사용하여 다음과 같이 그려줌[기존에 있는 대화상자 컨트롤을 배치합니다 라고 쓰인 것은 삭제] 

 


2. 샘플입력란 이라고 된 위쪽 에디트 박스를 우클릭 ->  변수추가 를 눌러서

2-1 범주 를 Value 로 바꾸고
2-2 Variable Name 을 m_strID 로 정함.

여기서 주석 을 정할 경우

프로젝트명Dlg.h부분에

추가된 변수쪽의 내용에 주석이 적히게 됨.

\\\\\\\\\\\\\\

public:

// 로그인 ID

CString m_strID;

// 로그인패스워드

CString m_strPassword;
\\\\\\\\\\\\\\

이런식.

또한

프로젝트명Dlg.cpp에

// CTESSSTDlg 대화 상자



//이 부분부터


CTESSSTDlg::CTESSSTDlg(CWnd* pParent /*=NULL*/)

: CDialog(CTESSSTDlg::IDD, pParent)

, m_strID(_T(""))//굵은 글씨로 된 코드

, m_strPassword(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}


void CTESSSTDlg::DoDataExchange(CDataExchange* pDX)//굵은 글씨로 된 코드

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, m_strID);//굵은 글씨로 된 코드

DDX_Text(pDX, IDC_EDIT2, m_strPassword);

}//이 부분까지 책에 나온 코드



이런식으로 코드가 짜여짐을 알 수 있음. [위 코드는 2번째 에디트 컨트롤 의 변수도 정한 후 의 코드임]


3. 2번처럼 아래의 에디트 컨트롤도 m_strPassword 라는 변수 멤버를 등록해줌.

4. 확인 버튼을 더블클릭하면 자동으로 핸들러 함수가 등록이 되고 그곳에 다음과 같이 코드를 짜줌.


void CTESSSTDlg::OnBnClickedOk()

{

// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

//여기부터



UpdateData();

CString strTmp = _T("");

strTmp.Format(_T("입력한 ID는 \"%s\"이며 암호는 \"%s\" 입니다."), m_strID,m_strPassword);


AfxMessageBox(strTmp);



//여기까지

OnOK();

}


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

5. 작성이 끝났으면 실행을 하고 아무 단어나 입력한 뒤 확인을 눌러서 출력화면을 봄. 
 
출력화면


 
위에 쓰인 UpdateData()
의 정의는 요러함.

BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

기본값은 TRUE이므로 그냥 호출해서 쓰면 바로 작동하게됨.

이를 수행하면 적혀있는 값을 변수에 대입시키는 작동을 하게되며

FALSE의 경우는 그 반대, 즉 원래의 변수값들을 불러와서 정보화면을 변경하게 됨.

UpdateData함수가 FALSE를 반환하는 경우는 DoDateExchange 함수에 의한 경우이다.
이 함수는 UpdateData함수를 호출할 때 함께 호출되는 가상함수로 컨트롤 윈도우와 멤버 변수 간의 정보 동기화와 유효성 검사를 담당한다.

===============================
void CTESSSTDlg::DoDataExchange(CDataExchange* pDX)//굵은 글씨로 된 코드
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strID);//굵은 글씨로 된 코드
DDX_Text(pDX, IDC_EDIT2, m_strPassword);
}//이 부분까지 책에 나온 코드
===============================

이 코드를 보면 IDC_EDIT1 와 IDC_EDIT2 가 각각의 변수와 연결되어 있음을 명시하고 있다.

DDX란 Dialog Data eXchange의 약자이다.

DDV란 Dialog Data Vaildation의 약자이며 데이터의 유효성을 검사하는 함수이다.


기존에 정해둔 멤버변수에 대해 유효성 검사를 하려면 멤버 변수를 지정한 것과 같은 방식으로 멤버변수를 정해주는 화면을 띄우고 Max Chars의 값 등을 정해주면 된다.

Max Chars를 12 정도로 하고 문자 길이를 12 이상의 값을 입력한 뒤 확인 을 누르면 오류 메시지가 자동으로 출력된다.

//////////////////////////////////////////////////////////////
void CTESSSTDlg::DoDataExchange(CDataExchange* pDX)//굵은 글씨로 된 코드
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strID);//굵은 글씨로 된 코드
DDX_Text(pDX, IDC_EDIT2, m_strPassword);
DDV_MaxChars(pDX, m_strID, 12); //최대값을 정해 넣으면 생기는 코드.
}//이 부분까지 책에 나온 코드

 ///////////////////////////////////////////////////////////

출력화면

 

 
탭 을 눌렀을때 커서가 이동하는것의 순서를 바꾸려면

간단하게는 컨트롤 + D 를 눌러서 마우스 클릭으로 바꾸는게 쉽고

탭 순서에서 제외하고싶으면 해당 아이콘을 클릭한뒤 TabStop 속성을 False로 수정하면 됨.

컨트롤 D를 눌렀을때의 화면.


  여기까지의 코드