네개의 컨트롤을 추가하고 다뤄본다.

Dialog 에서는 컨트롤이 쉽지만 View 에서는 수동으로 해야한다. 따라서  View --> dialog 로 전환시키는 방법을 고려한다.

 

 CEdit m_edit;
 CButton m_button;
 CListBox m_listBox;
 CComboBox m_comboBox;

 

1. h 파일에 위의 멤버 변수 추가

2 초기화 - view 의 window 가 onCreate 될때

 m_edit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE|WS_HSCROLL|WS_VSCROLL, 
  CRect(10, 10, 100, 100), this, IDC_EDIT);
 m_edit.SetMargins(10, 5);
 m_edit.SetLimitText(15);
 m_button.Create(L"OK", WS_CHILD | WS_VISIBLE | WS_BORDER | BS_DEFPUSHBUTTON, 
  CRect(110, 10, 200, 200), this, IDC_BUTTON);

 // 주의 할 점
 // 리스트 박스는 기본 동작이 통지코드가 발생하지 않습니다.
 // 부모 윈도에서 통지 코드를 받기 위해서는 스타일에 LBS_NOTIFY 를 추가해야 합니다.
 m_listBox.Create(WS_CHILD | WS_VISIBLE | WS_BORDER| LBS_NOTIFY,
  CRect(210, 10, 300, 100), this, IDC_LISTBOX);

 m_comboBox.Create(WS_CHILD | WS_VISIBLE | WS_BORDER |CBS_DROPDOWNLIST,
  CRect(310, 10, 400, 100), this, IDC_COMBOBOX);

 

여기서 사용되는 ID 는 미리 정의해둔다.

// 내부적으로 사용하는 컨트롤에 대해 매크로를 통해 아이디를 관리해야 한다.
#define IDC_EDIT  1
#define IDC_BUTTON  2
#define IDC_LISTBOX  3
#define IDC_COMBOBOX 4

 

각 컨트롤들의 이벤트를 처리하기위한 Message Map 을 직접 추가한다.

 ON_EN_CHANGE(IDC_EDIT, onEdit) // 함수의 형태는 : void onEdit()

 ON_BN_CLICKED(IDC_BUTTON, onClick)

 ON_LBN_DBLCLK(IDC_LISTBOX, onListBoxDbClk)

 

각 함수를 구현한다.

void CChildView::OnClick()
{
 // edit 에서 문자열을 꺼내와서
 // list 에 추가하고
 // edit 를 비운다.
 CString s;
 m_edit.GetWindowText(s);

 m_listBox.AddString(s);
 m_edit.SetSel(0, -1);
 m_edit.Clear();
}

void CChildView::OnListBoxDbClk()
{
 // 1. 선택된 인덱스를 구한다.
 int index = m_listBox.GetCurSel();

 CString s;
 m_listBox.GetText(index, s);
 m_comboBox.AddString(s);
 // 2. 인덱스를 삭제한다.
 m_listBox.DeleteString(index);
}

 

 

<출처> http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Z38f&articleno=18&_bloghome_menu=recenttext&totalcnt=23