본문 바로가기

old drawer/C, C++, MFC

[MFC] CEdit 입력 제어

오늘은 제목과 같이 CEdit에 대해서 알아보도록 하겠습니다.

입력 받는 창을 Edit입니다. 사용자에 입력을 받거나 원하는값을 넣어 주는것이

바로 Edit담당입니다.

백문이 불여 일견이라 ;; 한번 직접 해보시는것이 더 빠르게 오실듯 싶습니다.

 

1. 파일 -> 새 프로젝트 -> MFC 응용프로그램 선택 -> 이름을 정하신후 확인

2. 응용프로그램 종류에서 -> 단일 문서 (SDI)를 선택후 -> 마침을 클릭하시기 바랍니다.

모든 컨트룰 에 기본적인 함수가 Create()입니다. 이것은 컨트룰를 생성하는 기본중

기본함수로 어떤 형식인지 보도록 하겠습니다.

virtual BOOL Create(
   DWORD dwStyle,
   const RECT& rect,
   CWnd* pParentWnd,
   UINT nID
);

Edit Style 종류

  • ES_AUTOHSCROLL  

  • ES_AUTOVSCROLL 

  • ES_CENTER 

  • ES_LEFT

  • ES_LOWERCASE 

  • ES_MULTILINE  (ES_AUTOVSCROLL ,ES_AUTOHSCROLL)

  • ES_NOHIDESEL 

  • ES_NUMBER
  • ES_OEMCONVERT  
  • ES_PASSWORD   

  • ES_READONLY 

  • ES_RIGHT

  • ES_UPPERCASE 

  • ES_WANTRETURN 

위에 ES_XXX 스타일 중에서 LEFT / RIGHT /CENTER 는 EditBox에서 입력받을 위치를

지정 스타일이며 ,

ES_MULTILINE는 여러줄을 사용받겠다는 것이며 라인이 넘어 갈떄 표시 화면 이상으로 넘어 갔을경우 AUTOVSCROLL 이나 AUTOHSCROLL 과 같이 사용됩니다.

ES_PASSWORD - 는 암호 입력창에서 ****** 로 표시 되는것을 의미합니다.

ES_WANTERETURN - 는 EditBox에서 엔터키가 가능하도록 하는것입니다.

ES_NUMBER 는 숫자만 입력 가능하도록 하는 스타일입니다.

이상 스타일이며 ;;;

 

생성 코드문은 뷰 클래스에 OnCreate() 함수에 정의해 주시기 바랍니다.

Ex)

m_TestEdit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER , CRect(20,20,70,70),this,101);

여기까지 제작 되신 분은 어떤 메소드에 함수에 기능에 대해서 몇가지 알아보도록 하겠습니다.

여기에서 우리가 생각하셔야 하는것이 어떤 값을 입력 받을것인가 ;;

어떤 형태에 쓰일껏인가 를 한번쯤 생각해보신후 그에 걸맞은 최소한에 기능과

최대한에 기능이 무엇인지 알아보도록 하겠습니다.

기본적으로 Edit 에 역활은 앞서 말했던거 같이 우리가 원하는값을 입력 시키거나

보여주기 위한 곳입니다. 그럼 해당 값을 가지고 있는 변수를 지정해서 연결해 주어야

하는데 이것은 어떻형식으로 일어나는지 보고 그에 해당하는 함수를 보도록 하겠습니다.

DoDataExchange()를 재정의 하셔서 그곳에 DDX_Text()를 이용하여서 연결 시키고

작동 변수를 지정해야 합니다. !!

DoDataExchange()는 View부분에 속성에서 재정의하시는 부분이 있습니다.

거기에서 추가 하신면 아래와 같은 될것입니다.

=== XXView.h ===  부분

virtual void DoDataExchange(CDataExchange* pDX);

 

=== XXView.Cpp === 부분에 생성되었을것입니다.

void CT4View::DoDataExchange(CDataExchange* pDX)
{

    DDX_Text(pDX,101,m_str);
    CView::DoDataExchange(pDX);
}

위에 부분을 보시면 자동 생성된 DoDataExchange()는 영어와 같이 어떤 값이 변경되었을떄

호출되는 함수 입니다. 그렇다면 아래의 DDX_Text()라는 함수에 역활은 그 변경된

내용을 가져와서 연결시켜 주는부분을 의미합니다.

DDX_Text(pDX, ID값 ,변수);

그럼 기본적인 기능은 어떻게 MFC에서 돌아가시는지 이해 가셧다고 봅니다.

그럼 여기에서 저것은 단순이 변수를 지정하는것입니다. 저것에 걸맞는 짝패(?)

가 있습니다. 바로 UpdateData() 입니다.

UpdateData()에 역활은 무엇이냐 하면 DoDataExchange()가 발생되면 어디로 지정할것지

지시를 받고, 실제로 값을 해당 변수로 넣어주어라 하는것이 바로 UpdateData()역활입니다.

사용자 입력 ----> "test123" 입력 ----> DoDataExchange()발생 (어디로 입력할 변수 지정)

----> UpdateData(TRUE) (실제로 값을 기억시킴) 

이런 순서입니다. 여기에서 반대로

변수 값 =" test123"를 Edit 박스에 나타나려면 어떻게 해야할까요?

m_Str ="test123";

UpdateData(FALSE); 코딩해 주시면 test123이 Edit박스에 출력되는 것이 보일껏입니다.

이상 박스 컨트룰 부분을 간략하게 설명해 보았습니다. !!

좋은 하루 되세요!!

 

                                                      출처 : http://blog.naver.com/nsneis/50004053053

'old drawer > C, C++, MFC' 카테고리의 다른 글

[MFC] 버튼의 동적생성  (0) 2012.07.20
[MFC] 다이얼로그 동적 생성  (1) 2012.07.19
[MFC] SetWindowPos() 윈도우 위치 및 크기 등의 변경  (0) 2012.07.19
[MFC] CString <-> char* / int  (0) 2012.07.13
[MFC] CEdit Styles  (0) 2012.07.13