U E D R , A S I H C RSS

5�용C++스터디/�디트박스와콤보박스

  • 발표ì—� ê¼­ 들어가야 í•  것들
    • ì—�디트박스는 어떻게 만드나?
    • ì—�디트박스ì�˜ ë‚´ìš©ì�„ 어떻게 얻어오나?
    • 콤보박스ì—�는 ì–´ë–¤ 종류가 있나?
    • 콤보박스는 어떻게 만드나?
    • 콤보박스ì—� 어떻게 ì•„ì�´í…œì�„ 추가하나?
    • 콤보박스ì�˜ ë‚´ìš©ì�„ 어떻게 얻어오나?
    • 다ì�´ì–¼ë¡œê·¸ 박스ì—�서 만들고 사용하는 방법ì�„ 발표하면 안ë�¨!
  • 발표ì—� 들어가면 좋ì�€ 것들
    • 리스트박스ì—� 대하여...

1. �디트


�디트 컨트롤� 문�열� 보여주며 편집할 수 있�� 해주는 컨트롤�다. 주로 사용��게 문�열� 입력받� 때 사용�다.
�디트 컨트롤� CEdit �래스로 표현�다. 멤버함수는 다�과 같다.

멤버함수 / 설명
CEdit / �성�
Clear / 선��역� 지운다.
Copy / 선��역� �립보드로 복사한다.
Create / �디트를 만든다.
Cut / 선��역� 잘�낸다.
Paste / �립보드� �스트를 붙여넣는다.
Undo / 최후 편집 �작� 취소한다.

� 멤버함수들 중�서 Create 함수를 사용하면 대화�� 템플리트� �디트를 배치하지 않고� 실행중� �디트 컨트롤� �성할 수 있다.
CreateEdit�는 프로�트를 만들어보�. �뷰가 아닌 �반 뷰� �디트를 배치하려면 뷰가 �성� 때 (WM_CREATE) OnCreate�서 �디트를 �성시키면 �다. 우선 뷰� 헤�파�� 열어 CEdit형 ��터를 선언한다.


~cpp 
class CCreateEditView : public CView
{
protected:
	CCreateEditView();
	DECLARE_DYNCREATE(CCreateEditView)

//Attributes
public:
	CCreateEditDoc* GetDocument();
	CEdit *m_pEdit;

그리고 뷰� WM_CREATE 메시지 핸들러� OnCreate를 작성하고 � 핸들러�서 �디트를 �성한다.


~cpp 
#define IDC_MYEDIT 1000
int CCreateEditView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if(CView::OnCreate(lpCreateStruct) == -1)
	return -1;

	m_pEdit = new CEdit;
	m_pEdit -> Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
		CRect(10, 10, 300, 35), this, IDC_MYEDIT);

	return 0;
}

m_Editê°€ CEditì�˜ í�¬ì�¸í„°ë¡œ ì„ ì–¸ë�˜ì—ˆìœ¼ë¯€ë¡œ ì�¼ë‹¨ new ì—°ì‚°ìž�로 CEditê°�체를 만든다. 그리고 ì�´ ê°�ì²´ì�˜ Create 멤버함수를 호ìœí•˜ì—¬ ì—�디트를 ìƒ�성한다. Create 함수ì�˜ ì›�형ì�€ 다ì�Œê³¼ 같다.


~cpp 
BOOL Create(DWORD dwstyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

첫 번째 �수로 �디트� 스타�� 주� �디트는 메� 윈�우가 � 수 없으므로 WS_CHILD 스타�� 주어야 하고 �성하�마� 보여야 하므로 WS_VISIBLE 스타�� 주어야 한다. �한 �디트는 디�트로 경계선� 가지지 않으므로 WS_BORDER 스타�� 주어야 보�게 �다. � 번째 �수로 �디트가 차지할 사��역� 주고 세 번째 �수로 �디트� 부모 윈�우� ��터를 준다. 마지막 �수� nID는 �디트 컨트롤� ID�� 통지 메시지를 처리하지 않� 경우는 ID를 주지 않아� �관없다.
예제�서는 (10, 10, 300, 35) 사� �역� �디트를 �성하였으며 통지 메시지를 사용할 것�므로 IDC_MYEDIT�는 매�로 �수를 1000으로 정�하여 ID로 주었다. 여기서 1000��는 ID는 임�로 준 것�다.

new 연산�로 �디트 �체를 만들었으므로 프로그램� 종료� 때 � �체를 파괴해 주어야 한다. WM_DESTROY 메시지� 핸들러� 다� 코드를 작성하면 �다.


~cpp 
void CCreateEditView::OnDestroy()
{
	CView::OnDestroy();
	
	delete m_pEdit;
}

ì�´ë ‡ê²Œ Create 함수로 만든 ì—�디트ì�˜ 통지 메시지는 어떻게 처리해야 할까. í�´ëž˜ìФ 위저드가 메시지 핸들러를 만들 때 해주는 세가지 ë�™ìž‘ì�„ 프로그래머가 ì§�ì ‘ 해줘야 한다. ìš°ì„  메시지 ë§µì—�서 메시지와 메시지 핸들러를 연결시켜 준다. ON_EN_CHANGE 매í�¬ë¡œì—� ì�˜í•´ IDC_MYEDIT ì—�디트가 EN_CHANGE 메시지를 보내올 때 OnChangeEdit1 함수가 호ìœë�œë‹¤.



~cpp 
BEGIN_MESSAGE_MAP(CCreateEditView, CView)
	//{{AFX_MSG_MAP((CCreateEditView)
.
.
.
.
.
	//Standard printing commands
	ON_EN_CHANGE(IDC_MYEDIT, OnChangeEdit1)
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
.
.
.

� 번째로 헤�파�� 메시지 핸들러� 함수� �형� 선언한다.

~cpp 

//Generated message map functions
protected:
	//{{AFX_MSG(CCreateEditView)
	.
	.
	//}}AFX_MSG
	afx_msg void OnChangeEdit1();
	DECLARE_MESSAGE_MAP()
};

세 번째로 메시지 핸들러 함수 OnChangeEdit1 함수를 작성한다. 함수� 본체 코드는 물론�고 함수명까지 �접 입력해 주어야 한다. � 함수는 �디트 컨트롤� 문�열� �어 들�는 함수�다.


~cpp 

void CCreateEditView::OnChangeEdit1()
{
	CString str;
	m_pEdit->GetWindowText(str);
	AfxGetMainWnd()->SetWindowText(str);
}

예제�서 �디트� EN_CHANGE 통지 메시지를 사용해 보았다. 통지 메시지란 컨트롤� 어떤 변화가 발�했� 때 부모 윈�우�게 �신� 변화를 알리기 위해 보내는 메시지를 �한다.
�디트� 통지 메시지는 다�과 같다.

메시지 / 설명
EN_CHANGE / �디트� 문�열� 변경�었다.
EN_ERRSPACE / 메모리가 부족하다.
EN_HSCROLL / 사용�가 수�스�롤 바를 �릭하였다.
EN_VSCROLL / 사용�가 수�스�롤 바를 �릭하였다.
EN_KILLFOCUS/ �커스를 잃었다.
EN_SETFOCUT / �커스를 얻었다.
EN_MAXTEXT / 지정한 문�열 길�를 초과하였다.
EN_UPDATE / 문�열� 변경�기 �전�다.



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:18
Processing time 0.0061 sec