본문 바로가기
Development Solutions/MFC

[MFC][4] Development of UI for membership registration using control (컨트롤을 활용한 회원 가입 UI 개발하기)

by Dev Diary Hub 2022. 8. 20.
반응형

[MFC][4]

Development of UI for membership registration using control

컨트롤을 활용한 회원 가입 UI 개발하기

 

2022.08.20 - [Development Solutions/MFC] - [MFC][3] Developing Paint (그림판 개발하기)

 

[MFC][3] Developing Paint (그림판 개발하기)

[MFC][3] Developing Paint 그림판 만들기 2022.08.20 - [Development Solutions/MFC] - [MFC][2] Declare classes to shape and clear (클래스 선언하여 도형 그리고 지우기) [MFC][2] Declare classes to shap..

studiodoc.tistory.com

(추천) Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 강의 - 입문편

https://inf.run/3XmSH

 

Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 - 입문편 강의 - 인프런

Qt QML과 C++를 사용하여 크로스플랫폼 애플리케이션 개발에 입문할 수 있습니다. 해당 강의에서는 윈도우 응용 프로그램 타겟으로 개발을 진행합니다., 강의 주제 📖 이 강의를 통해 참가자들은

www.inflearn.com

 

 

컨트롤을 이용하여 회원 가입을 위한 정보 입출력(저장 및 열기)을 위한 화면 구성을 구현했습니다.

(학번에 해당하는 텍스트는 "프로젝트 이름"으로 바꿨으니 양해바랍니다.)

(We implemented the screen configuration for information input/output (save and open) for membership registration using the control.

(Please understand that the text corresponding to the class number has been changed to "Project Name".))

 

 

- View.cpp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
// hw4_프로젝트 이름View.cpp : Chw4_프로젝트 이름View 클래스의 구현
//
 
#include "stdafx.h"
// SHARED_HANDLERS는 미리 보기, 축소판 그림 및 검색 필터 처리기를 구현하는 ATL 프로젝트에서 정의할 수 있으며
// 해당 프로젝트와 문서 코드를 공유하도록 해 줍니다.
#ifndef SHARED_HANDLERS
#include "hw4_프로젝트 이름.h"
#endif
 
#include "hw4_프로젝트 이름Doc.h"
#include "hw4_프로젝트 이름View.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// Chw4_프로젝트 이름View
 
 
IMPLEMENT_DYNCREATE(Chw4_프로젝트 이름View, CFormView)
 
BEGIN_MESSAGE_MAP(Chw4_프로젝트 이름View, CFormView)
    ON_WM_HSCROLL()
    ON_BN_CLICKED(IDSELFINTRODUC, &Chw4_프로젝트 이름View::OnBnClickedSelfintroduc)
    ON_BN_CLICKED(IDCOLOR_STATIC, &Chw4_프로젝트 이름View::OnBnClickedStatic)
    ON_BN_CLICKED(IDCOLOR_EDIT, &Chw4_프로젝트 이름View::OnBnClickedEdit)
    ON_BN_CLICKED(IDCOLOR_COMBO, &Chw4_프로젝트 이름View::OnBnClickedCombo)
    ON_WM_CTLCOLOR()
    ON_WM_CTLCOLOR()
    ON_BN_CLICKED(IDPICTUREBUTTON, &Chw4_프로젝트 이름View::OnBnClickedPicturebutton)
END_MESSAGE_MAP()
 
// Chw4_프로젝트 이름View 생성/소멸
 
Chw4_프로젝트 이름View::Chw4_프로젝트 이름View()
    : CFormView(Chw4_프로젝트 이름View::IDD)
{
    // TODO: 여기에 생성 코드를 추가합니다.
}
 
Chw4_프로젝트 이름View::~Chw4_프로젝트 이름View()
{
}
 
void Chw4_프로젝트 이름View::DoDataExchange(CDataExchange* pDX)
{
    CFormView::DoDataExchange(pDX);
    DDX_Control(pDX, IDAGEBAR, m_agebar);
    DDX_Control(pDX, IDMALE, m_male);
    DDX_Control(pDX, IDFEMALE, m_female);
    DDX_Control(pDX, IDLISTBOX, m_introlist);
    DDX_Control(pDX, IDNAMEBOX, m_name);
    DDX_Control(pDX, IDHOBBYBOX, m_hobbybox);
    DDX_Control(pDX, IDAGEDISPLAY, m_age);
    DDX_Control(pDX, IDPICTURE, m_picture);
}
 
BOOL Chw4_프로젝트 이름View::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: CREATESTRUCT cs를 수정하여 여기에서
    //  Window 클래스 또는 스타일을 수정합니다.
 
    return CFormView::PreCreateWindow(cs);
}
 
void Chw4_프로젝트 이름View::OnInitialUpdate()
{
    CFormView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit();
 
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
    CString str;
    //리스트 박스 초기화
    if (pDoc->m_MyData.age_str != _T(" "))
    {
        str = _T("나이: ");
        m_introlist.AddString(str + pDoc->m_MyData.age_str);
    }
    if (pDoc->m_MyData.name_str != _T(""))
    {
        str = _T("이름: ");
        m_introlist.AddString(str + pDoc->m_MyData.name_str);
    }
    if (pDoc->m_MyData.hobby_str != _T(" "))
    {
        str = _T("취미: ");
        m_introlist.AddString(str + pDoc->m_MyData.hobby_str);
 
        if (pDoc->m_MyData.state_male)
        {
            m_male.SetCheck(1);
            str = _T("성별: 남성");
        }
        else
        {
            m_female.SetCheck(1);
            str = _T("성별: 여성");
        }
        m_introlist.AddString(str);
    }
 
    //이름 초기화
    m_name.SetWindowTextW(pDoc->m_MyData.name_str);
    //나이 스크롤바 초기화
    m_agebar.SetScrollRange(1100);
    m_agebar.SetScrollPos(pDoc->m_MyData.scroll_pos);
    //나이 초기화
    pDoc->m_MyData.scroll_pos = m_agebar.GetScrollPos();
    pDoc->m_MyData.age_str.Format(_T("%d"), pDoc->m_MyData.scroll_pos);
    m_age.SetWindowTextW(pDoc->m_MyData.age_str);
    //취미 인덱스 초기화
    m_hobbybox.SetCurSel(pDoc->m_MyData.hobby_cursel);
    //성별 초기화
    m_male.SetCheck(pDoc->m_MyData.state_male);
}
 
 
// Chw4_프로젝트 이름View 진단
 
#ifdef _DEBUG
void Chw4_프로젝트 이름View::AssertValid() const
{
    CFormView::AssertValid();
}
 
void Chw4_프로젝트 이름View::Dump(CDumpContext& dc) const
{
    CFormView::Dump(dc);
}
 
Chw4_프로젝트 이름Doc* Chw4_프로젝트 이름View::GetDocument() const // 디버그되지 않은 버전은 인라인으로 지정됩니다.
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Chw4_프로젝트 이름Doc)));
    return (Chw4_프로젝트 이름Doc*)m_pDocument;
}
#endif //_DEBUG
 
 
// Chw4_프로젝트 이름View 메시지 처리기
 
 
void Chw4_프로젝트 이름View::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
    int pos;
    int delta = 0;
 
    if (pScrollBar != NULL)
    {
        if (pScrollBar->GetSafeHwnd() == pScrollBar->GetSafeHwnd())
        {
            switch (nSBCode)
            {
            case SB_THUMBTRACK:
                pScrollBar->SetScrollPos(nPos);
                break;
            case SB_LINEUP:
                delta -= 4;
                break;
            case SB_LINEDOWN:
                delta += 4;
                break;
            case SB_PAGEUP:
                delta -= 20;
                break;
            case SB_PAGEDOWN:
                delta += 20;
                break;
            }
            if (delta != 0)
            {
                pos = pScrollBar->GetScrollPos();
                pScrollBar->SetScrollPos(pos + delta);
            }
            //나이 초기화
            pDoc->m_MyData.scroll_pos = m_agebar.GetScrollPos();
            pDoc->m_MyData.age_str.Format(_T("%d"), pDoc->m_MyData.scroll_pos);
            m_age.SetWindowTextW(pDoc->m_MyData.age_str);
 
            Invalidate();
        }
    }
 
    CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}
 
 
void Chw4_프로젝트 이름View::OnDraw(CDC* pDC)
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
 
    //사진 초기화
    if (pDoc->m_MyData.strPathName != _T(" "))
    {
        //사진 컨트롤
        CDC *pDc = m_picture.GetWindowDC();
        CDC memdc;
        CStatic* picturesize = (CStatic*)GetDlgItem(IDPICTURE);
        CRect rect;
 
        //bmp 로드
        CImage m_bmpBitmap;
        picturesize->GetClientRect(rect);
        m_bmpBitmap.Destroy();
        m_bmpBitmap.Load(pDoc->m_MyData.strPathName);
 
        memdc.CreateCompatibleDC(pDc); pDc->SetStretchBltMode(COLORONCOLOR);
        pDc->StretchBlt(00, rect.Width(), rect.Height(), &memdc, 00, rect.Width(), rect.Height(), SRCCOPY);
        m_bmpBitmap.Draw(pDc->m_hDC, 00, rect.Width(), rect.Height());
 
        m_picture.ReleaseDC(pDc);
        pDc->DeleteDC();
        pDc = NULL;
    }
    //다이얼로그 색상
 
}
 
 
void Chw4_프로젝트 이름View::OnBnClickedSelfintroduc()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
 
    //자기소개 완성 버튼 누르면 아래 리스트 박스에 이름/나이/취미/성별 차례로 추가함
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
 
    CString str = _T("이름: ");
    m_name.GetWindowTextW(pDoc->m_MyData.name_str);
    str = str + pDoc->m_MyData.name_str;
    m_introlist.AddString(str);
 
    str = _T("나이: ");
    m_age.GetWindowTextW(pDoc->m_MyData.age_str);
    str = str + pDoc->m_MyData.age_str;
    m_introlist.AddString(str);
 
    pDoc->m_MyData.hobby_cursel = m_hobbybox.GetCurSel();
    if (pDoc->m_MyData.hobby_cursel != CB_ERR)
    {
        CString str1 = _T("취미: ");
        m_hobbybox.GetLBText(pDoc->m_MyData.hobby_cursel, pDoc->m_MyData.hobby_str);
        str1 += pDoc->m_MyData.hobby_str;
        m_introlist.AddString(str1);
    }
 
    CString gender_str;
    pDoc->m_MyData.state_male = m_male.GetCheck();
    if (pDoc->m_MyData.state_male == 1)
    {
        gender_str = _T("성별: 남성");
    }
    else
    {
        gender_str = _T("성별: 여성");
    }
    m_introlist.AddString(gender_str);
    
    Invalidate();
 
}
 
 
void Chw4_프로젝트 이름View::OnBnClickedStatic()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
    CColorDialog dlg;
    dlg.DoModal();
    pDoc->m_MyData.m_staticcolor = dlg.GetColor();
    Invalidate();
}
 
 
void Chw4_프로젝트 이름View::OnBnClickedEdit()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
    CColorDialog dlg;
    dlg.DoModal();
    pDoc->m_MyData.m_editcolor = dlg.GetColor();
    Invalidate();
}
 
 
void Chw4_프로젝트 이름View::OnBnClickedCombo()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
    CColorDialog dlg;
    dlg.DoModal();
    pDoc->m_MyData.m_combocolor = dlg.GetColor();
    Invalidate();
}
 
 
//1. CDC* pDC - MFC에서 제공하는 디바이스 컨텍스트
//2. CWnd* pWnd - 대상이 되는 다이알로그에 올려진 컨트롤 윈도우
//3. UINT nCtlColor - 대상이 되는 컨트롤의 구분 타입
HBRUSH Chw4_프로젝트 이름View::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
 
    if (pWnd->GetDlgCtrlID() == IDHOBBYBOX || nCtlColor == CTLCOLOR_LISTBOX
        || nCtlColor == CTLCOLOR_EDIT)
    {
        pDC->SetTextColor(pDoc->m_MyData.m_combocolor);
        pDC->SetBkMode(TRANSPARENT);   // combo text 배경색 투명
    }
    if (pWnd->GetDlgCtrlID() == IDNAME || pWnd->GetDlgCtrlID() == IDAGE
        || pWnd->GetDlgCtrlID() == IDHOBBY)
    {
        pDC->SetTextColor(pDoc->m_MyData.m_staticcolor);
        pDC->SetBkMode(TRANSPARENT);   // static text 배경색 투명
    }
    if (pWnd->GetDlgCtrlID() == IDNAMEBOX || pWnd->GetDlgCtrlID() == IDAGEDISPLAY)
    {
        pDC->SetTextColor(pDoc->m_MyData.m_editcolor);
        pDC->SetBkMode(TRANSPARENT);   // edit text 배경색 투명
    }
 
    // TODO:  기본값이 적당하지 않으면 다른 브러시를 반환합니다.
    return hbr;
}
 
 
void Chw4_프로젝트 이름View::OnBnClickedPicturebutton()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
 
 
    static TCHAR BASED_CODE szFilter[] = _T("이미지 파일(*.BMP) | *.BMP;*.bmp |");
 
    CFileDialog dlg(TRUE, _T("*.bmp"), _T("bitmap"), OFN_HIDEREADONLY, szFilter);
    Chw4_프로젝트 이름Doc* pDoc = GetDocument();
 
    if (IDOK == dlg.DoModal())
 
    {
        //파일 경로 
        pDoc->m_MyData.strPathName = dlg.GetPathName();
        //사진 컨트롤
        CDC *pDc = m_picture.GetWindowDC();
        CDC memdc;
        CStatic* picturesize = (CStatic*)GetDlgItem(IDPICTURE);
        CRect rect;
 
        //bmp 로드
        CImage m_bmpBitmap;
        picturesize->GetClientRect(rect);
        m_bmpBitmap.Destroy();
        m_bmpBitmap.Load(pDoc->m_MyData.strPathName);
 
        memdc.CreateCompatibleDC(pDc); pDc->SetStretchBltMode(COLORONCOLOR);
        pDc->StretchBlt(00, rect.Width(), rect.Height(), &memdc, 00, rect.Width(), rect.Height(), SRCCOPY);
        m_bmpBitmap.Draw(pDc->m_hDC, 00, rect.Width(), rect.Height());
 
        m_picture.ReleaseDC(pDc);
        pDc->DeleteDC();
        pDc = NULL;
 
 
    }
 
}
 
cs
반응형

- View.h

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
// hw4_프로젝트 이름View.h : Chw4_프로젝트 이름View 클래스의 인터페이스
//
 
#pragma once
 
#include "resource.h"
#include "afxwin.h"
 
 
class Chw4_프로젝트 이름View : public CFormView
{
protected// serialization에서만 만들어집니다.
    Chw4_프로젝트 이름View();
    DECLARE_DYNCREATE(Chw4_프로젝트 이름View)
 
public:
    enum{ IDD = IDD_HW4_프로젝트 이름_FORM };
 
// 특성입니다.
public:
    Chw4_프로젝트 이름Doc* GetDocument() const;
 
// 작업입니다.
public:
 
// 재정의입니다.
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
    virtual void OnInitialUpdate(); // 생성 후 처음 호출되었습니다.
 
// 구현입니다.
public:
    virtual ~Chw4_프로젝트 이름View();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif
 
protected:
 
// 생성된 메시지 맵 함수
protected:
    DECLARE_MESSAGE_MAP()
public:
    CScrollBar m_agebar;
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    virtual void OnDraw(CDC* pDC);
    CButton m_male;
    CButton m_female;
    afx_msg void OnBnClickedSelfintroduc();
    CListBox m_introlist;
    CEdit m_name;
    CComboBox m_hobbybox;
    CEdit m_age;
    afx_msg void OnBnClickedStatic();
    afx_msg void OnBnClickedEdit();
    afx_msg void OnBnClickedCombo();
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    afx_msg void OnBnClickedPicturebutton();
    CStatic m_picture;
};
 
#ifndef _DEBUG  // hw4_프로젝트 이름View.cpp의 디버그 버전
inline Chw4_프로젝트 이름Doc* Chw4_프로젝트 이름View::GetDocument() const
   { return reinterpret_cast<Chw4_프로젝트 이름Doc*>(m_pDocument); }
#endif
 
 
cs

 

- Doc.cpp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
 
// hw4_프로젝트 이름Doc.cpp : Chw4_프로젝트 이름Doc 클래스의 구현
//
 
#include "stdafx.h"
// SHARED_HANDLERS는 미리 보기, 축소판 그림 및 검색 필터 처리기를 구현하는 ATL 프로젝트에서 정의할 수 있으며
// 해당 프로젝트와 문서 코드를 공유하도록 해 줍니다.
#ifndef SHARED_HANDLERS
#include "hw4_프로젝트 이름.h"
#endif
 
#include "hw4_프로젝트 이름Doc.h"
 
#include <propkey.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
// Chw4_프로젝트 이름Doc
 
IMPLEMENT_DYNCREATE(Chw4_프로젝트 이름Doc, CDocument)
 
BEGIN_MESSAGE_MAP(Chw4_프로젝트 이름Doc, CDocument)
END_MESSAGE_MAP()
 
 
// Chw4_프로젝트 이름Doc 생성/소멸
 
Chw4_프로젝트 이름Doc::Chw4_프로젝트 이름Doc()
{
    // TODO: 여기에 일회성 생성 코드를 추가합니다.
 
}
 
Chw4_프로젝트 이름Doc::~Chw4_프로젝트 이름Doc()
{
}
 
BOOL Chw4_프로젝트 이름Doc::OnNewDocument()
{
    if (!CDocument::OnNewDocument())
        return FALSE;
 
    // TODO: 여기에 재초기화 코드를 추가합니다.
    // SDI 문서는 이 문서를 다시 사용합니다.
 
    return TRUE;
}
 
 
 
 
// Chw4_프로젝트 이름Doc serialization
 
void Chw4_프로젝트 이름Doc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: 여기에 저장 코드를 추가합니다.
        m_MyData.Serialize(ar);
    }
    else
    {
        // TODO: 여기에 로딩 코드를 추가합니다.
        m_MyData.Serialize(ar);
    }
}
 
#ifdef SHARED_HANDLERS
 
// 축소판 그림을 지원합니다.
void Chw4_프로젝트 이름Doc::OnDrawThumbnail(CDC& dc, LPRECT lprcBounds)
{
    // 문서의 데이터를 그리려면 이 코드를 수정하십시오.
    dc.FillSolidRect(lprcBounds, RGB(255255255));
 
    CString strText = _T("TODO: implement thumbnail drawing here");
    LOGFONT lf;
 
    CFont* pDefaultGUIFont = CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT));
    pDefaultGUIFont->GetLogFont(&lf);
    lf.lfHeight = 36;
 
    CFont fontDraw;
    fontDraw.CreateFontIndirect(&lf);
 
    CFont* pOldFont = dc.SelectObject(&fontDraw);
    dc.DrawText(strText, lprcBounds, DT_CENTER | DT_WORDBREAK);
    dc.SelectObject(pOldFont);
}
 
// 검색 처리기를 지원합니다.
void Chw4_프로젝트 이름Doc::InitializeSearchContent()
{
    CString strSearchContent;
    // 문서의 데이터에서 검색 콘텐츠를 설정합니다.
    // 콘텐츠 부분은 ";"로 구분되어야 합니다.
 
    // 예: strSearchContent = _T("point;rectangle;circle;ole object;");
    SetSearchContent(strSearchContent);
}
 
void Chw4_프로젝트 이름Doc::SetSearchContent(const CString& value)
{
    if (value.IsEmpty())
    {
        RemoveChunk(PKEY_Search_Contents.fmtid, PKEY_Search_Contents.pid);
    }
    else
    {
        CMFCFilterChunkValueImpl *pChunk = NULL;
        ATLTRY(pChunk = new CMFCFilterChunkValueImpl);
        if (pChunk != NULL)
        {
            pChunk->SetTextValue(PKEY_Search_Contents, value, CHUNK_TEXT);
            SetChunkValue(pChunk);
        }
    }
}
 
#endif // SHARED_HANDLERS
 
// Chw4_프로젝트 이름Doc 진단
 
#ifdef _DEBUG
void Chw4_프로젝트 이름Doc::AssertValid() const
{
    CDocument::AssertValid();
}
 
void Chw4_프로젝트 이름Doc::Dump(CDumpContext& dc) const
{
    CDocument::Dump(dc);
}
#endif //_DEBUG
 
 
// Chw4_프로젝트 이름Doc 명령
 
cs

 

 - Doc.h

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
// hw4_프로젝트 이름Doc.h : Chw4_프로젝트 이름Doc 클래스의 인터페이스
//
 
 
#pragma once
#include "MyData.h"
 
 
class Chw4_프로젝트 이름Doc : public CDocument
{
protected// serialization에서만 만들어집니다.
    Chw4_프로젝트 이름Doc();
    DECLARE_DYNCREATE(Chw4_프로젝트 이름Doc)
 
// 특성입니다.
public:
    CMyData m_MyData;
 
// 작업입니다.
public:
 
// 재정의입니다.
public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
#ifdef SHARED_HANDLERS
    virtual void InitializeSearchContent();
    virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
#endif // SHARED_HANDLERS
 
// 구현입니다.
public:
    virtual ~Chw4_프로젝트 이름Doc();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif
 
protected:
 
// 생성된 메시지 맵 함수
protected:
    DECLARE_MESSAGE_MAP()
 
#ifdef SHARED_HANDLERS
    // 검색 처리기에 대한 검색 콘텐츠를 설정하는 도우미 함수
    void SetSearchContent(const CString& value);
#endif // SHARED_HANDLERS
};
 
cs

 

- MyData.cpp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// MyData.cpp : 구현 파일입니다.
//
 
#include "stdafx.h"
#include "hw4_프로젝트 이름.h"
#include "MyData.h"
 
 
// CMyData
 
IMPLEMENT_DYNCREATE(CMyData, CFormView)
 
CMyData::CMyData()
{
}
 
CMyData::~CMyData()
{
}
 
 
// CMyData 멤버 함수
 
void CMyData::Serialize(CArchive& ar)
{
    CObject::Serialize(ar);
 
    if (ar.IsStoring())//저장
    {
        ar << m_staticcolor << m_editcolor << m_combocolor << age_str
            << name_str << hobby_str << state_male << hobby_cursel
            << scroll_pos << strPathName;
        
    }
    else//열기
    {
        ar >> m_staticcolor >> m_editcolor >> m_combocolor >> age_str
            >> name_str >> hobby_str >> state_male >> hobby_cursel
            >> scroll_pos >> strPathName;
    }
}
cs

 

- MyData.h

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma once
 
// CMyData 명령 대상입니다.
 
class CMyData : public CObject
{
    DECLARE_DYNCREATE(CMyData)
 
public:
    CMyData();
    virtual ~CMyData();
    void CMyData::Serialize(CArchive& ar);
 
public:
    CString age_str = _T(" ");
    CString name_str = _T("");
    CString hobby_str = _T(" ");
    CString strPathName = _T(" ");
    int state_male = 1;
    int hobby_cursel = -1;
    int scroll_pos = 1;
    COLORREF m_staticcolor = RGB(000);
    COLORREF m_editcolor = RGB(000);
    COLORREF m_combocolor = RGB(000);
};
 
 
 
cs

 

(추천) Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 강의 - 입문편

https://inf.run/3XmSH

 

Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 - 입문편 강의 - 인프런

Qt QML과 C++를 사용하여 크로스플랫폼 애플리케이션 개발에 입문할 수 있습니다. 해당 강의에서는 윈도우 응용 프로그램 타겟으로 개발을 진행합니다., 강의 주제 📖 이 강의를 통해 참가자들은

www.inflearn.com

 

반응형