- 발표ì—� ê¼ ë“¤ì–´ê°€ì•¼ í• ê²ƒë“¤
- �디트박스는 어떻게 만드나?
- �디트박스� 내용� 어떻게 얻어오나?
- 콤보박스�는 어떤 종류가 있나?
- 콤보박스는 어떻게 만드나?
- 콤보박스� 어떻게 아�템� 추가하나?
- 콤보박스� 내용� 어떻게 얻어오나?
- 다ì�´ì–¼ë¡œê·¸ 박스ì—�서 ë§Œë“¤ê³ ì‚¬ìš©í•˜ëŠ” 방법ì�„ 발표하면 안ë�¨!
- �디트박스는 어떻게 만드나?
- 발표� 들어가면 좋� 것들
- 리스트박스� 대하여...
- 리스트박스� 대하여...
1. ì—�디트 ¶
ì—�디트 컨트롤ì�€ 문ìž�ì—´ì�„ 보여주며 íŽ¸ì§‘í• ìˆ˜ 있ë�„ë¡� 해주는 컨트롤ì�´ë‹¤. 주로 사용ìž�ì—�게 문ìž�ì—´ì�„ ìž…ë ¥ë°›ì�„ 때 사용ë�œë‹¤.
�디트 컨트롤� CEdit �래스로 표현�다. 멤버함수는 다�과 같다.
멤버함수 / 설명�디트 컨트롤� 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 메시지ì�˜ 핸들러ì—� 다ì�Œ 코드를 작성하면 ë�œë‹¤.
ì˜ˆì œì—�서는 (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 / 문ìž�ì—´ì�´ 변경ë�˜ê¸° ì§�ì „ì�´ë‹¤.










