๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Information

๐Ÿš€ Visual C++ MFC 2017, ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: ์ดˆ๋ณด์ž๋ฅผ ์œ„

by 9sf6sf763a 2025. 10. 29.
๐Ÿš€ Visual C++ MFC 2017, ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: ์ดˆ๋ณด์ž๋ฅผ ์œ„
๋ฐฐ๋„ˆ2 ๋‹น๊ฒจ์ฃผ์„ธ์š”!

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜•

 

 

๐Ÿš€ Visual C++ MFC 2017, ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: ์ดˆ๋ณด์ž๋ฅผ ์œ„

ํ•œ ํ™•์‹คํ•œ ๊ฐ€์ด๋“œ!

๋ชฉ์ฐจ

  1. ์„œ๋ก : ์™œ Visual C++ MFC์ธ๊ฐ€?
  2. Visual C++ 2017 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •
    • Visual Studio 2017 ์„ค์น˜ ๋ฐ MFC ๊ตฌ์„ฑ ์š”์†Œ ํ™•์ธ
    • ์ƒˆ MFC ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ
  3. MFC ๊ธฐ์ดˆ: ์œˆ๋„์šฐ์™€ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„ ์ดํ•ด
    • MFC์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ: CWinApp, CFrameWnd, CDocument, CView
    • ๋ฉ”์‹œ์ง€ ๋งต(Message Map)๊ณผ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์›๋ฆฌ
  4. ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ํ™œ์šฉํ•œ UI ๋””์ž์ธ ๊ฐ€์†ํ™”
    • ๋Œ€ํ™” ์ƒ์ž(Dialog Box) ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ํ™œ์šฉ
    • ์ปจํŠธ๋กค(Control) ๋ฐฐ์น˜ ๋ฐ ์†์„ฑ ์„ค์ •
  5. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปจํŠธ๋กค ๋‹ค๋ฃจ๊ธฐ
    • ๋ฒ„ํŠผ(Button) ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: BN_CLICKED
    • ์—๋””ํŠธ ์ปจํŠธ๋กค(Edit Control)๋กœ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ
    • ๋ฆฌ์ŠคํŠธ ์ปจํŠธ๋กค(List Control)๋กœ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก ํ‘œ์‹œ
  6. MFC์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ๋ฐ์ดํ„ฐ ๊ตํ™˜ (DDX/DDV)
    • DDX(Dialog Data Exchange)๋ฅผ ์ด์šฉํ•œ ์ปจํŠธ๋กค-๋ณ€์ˆ˜ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”
    • DDV(Dialog Data Validation)๋ฅผ ์ด์šฉํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ
  7. ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘ ์‹ค์Šต ์˜ˆ์ œ: ๊ณ„์‚ฐ๊ธฐ
    • UI ๊ตฌ์„ฑ ๋ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€
    • ๊ฐ„๋‹จํ•œ ์‚ฌ์น™์—ฐ์‚ฐ ๋กœ์ง ๊ตฌํ˜„
  8. ๊ฒฐ๋ก : MFC๋กœ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฌธ์„ ์—ด๋‹ค

1. ์„œ๋ก : ์™œ Visual C++ MFC์ธ๊ฐ€?

์œˆ๋„์šฐ ์šด์˜์ฒด์ œ(OS)์—์„œ ๊ตฌ๋™๋˜๋Š” ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ธ์ •๋ฐ›์•„ ์˜จ ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ **Visual C++ MFC(Microsoft Foundation Classes)**๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ 2017๋…„ ๋ฒ„์ „์˜ Visual C++ ํ™˜๊ฒฝ์€ ์•ˆ์ •์ ์ธ ๊ฐœ๋ฐœ ๋„๊ตฌ์™€ ํ•จ๊ป˜ MFC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, C++์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๊ณผ ์œˆ๋„์šฐ API์˜ ์ ‘๊ทผ์„ฑ์„ ๊ฒฐํ•ฉํ•œ ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. MFC๋Š” ๋ณต์žกํ•œ ์œˆ๋„์šฐ API ํ˜ธ์ถœ์„ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ UI ์š”์†Œ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์ตœ๊ทผ์—๋Š” C#/.NET, WPF ๋“ฑ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๋“ค์ด ๋“ฑ์žฅํ–ˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋†’์€ ์„ฑ๋Šฅ, ์œˆ๋„์šฐ OS์˜ ๊นŠ์€ ์ดํ•ด, ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜ ๋“ฑ์˜ ์ด์œ ๋กœ MFC๋Š” ์ค‘์š”ํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์€ Visual C++ 2017 ํ™˜๊ฒฝ์—์„œ MFC๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ด๊ณ  ์‹ค์šฉ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

2. Visual C++ 2017 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

Visual Studio 2017 ์„ค์น˜ ๋ฐ MFC ๊ตฌ์„ฑ ์š”์†Œ ํ™•์ธ

Visual C++ MFC ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € Visual Studio 2017์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ๊ณผ์ •์—์„œ ๋ฐ˜๋“œ์‹œ 'C++๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ' ์›Œํฌ๋กœ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋ฉฐ, ์„ ํƒ๋œ ์›Œํฌ๋กœ๋“œ์˜ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ ๋ชฉ๋ก์—์„œ 'MFC ๋ฐ ATL ์ง€์›(x86 ๋ฐ x64)' ํ•ญ๋ชฉ์ด ์ฒดํฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ MFC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ด€๋ จ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ IDE(Integrated Development Environment)๊ฐ€ ์ค€๋น„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒˆ MFC ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

Visual Studio 2017์„ ์‹คํ–‰ํ•˜๊ณ  'ํŒŒ์ผ' $\rightarrow$ '์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ' $\rightarrow$ 'ํ”„๋กœ์ ํŠธ'๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. 'Visual C++' ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก์—์„œ **'MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ'**์„ ์„ ํƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋งˆ๋ฒ•์‚ฌ(Wizard)๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด, ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…๋ฅ˜(์˜ˆ: ๋‹จ์ผ ๋ฌธ์„œ, ๋‹ค์ค‘ ๋ฌธ์„œ, ๋Œ€ํ™” ์ƒ์ž ๊ธฐ๋ฐ˜ ๋“ฑ)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๊ฐ€ ๊ฐ€์žฅ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ '๋Œ€ํ™” ์ƒ์ž ๊ธฐ๋ฐ˜(Dialog Based)' ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋ณ„๋„์˜ ๋ฉ”๋‰ด๋‚˜ ๋„๊ตฌ ๋ชจ์Œ ์—†์ด ํ•˜๋‚˜์˜ ๋ฉ”์ธ ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋ชจ๋“  UI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค๋ฃจ์–ด ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์‚ฌ์˜ ๋‚˜๋จธ์ง€ ์„ค์ •์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•œ ํ›„ '๋งˆ์นจ'์„ ๋ˆŒ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. MFC ๊ธฐ์ดˆ: ์œˆ๋„์šฐ์™€ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„ ์ดํ•ด

MFC์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ: CWinApp, CFrameWnd, CDocument, CView

MFC๋Š” ์œˆ๋„์šฐ API์˜ ๋ณต์žก์„ฑ์„ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์บก์Аํ™”ํ•œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฌธ์„œ/๋ทฐ ์•„ํ‚คํ…์ฒ˜(Document/View Architecture)๋Š” MFC์˜ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • CWinApp: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค๋กœ, ํ”„๋กœ๊ทธ๋žจ ์ดˆ๊ธฐํ™” ๋ฐ ์ข…๋ฃŒ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  MFC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • CFrameWnd: ์œˆ๋„์šฐ์˜ 'ํ‹€'์„ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค๋กœ, ์ œ๋ชฉ ํ‘œ์‹œ์ค„, ๋ฉ”๋‰ด, ๊ฒฝ๊ณ„ ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • CDocument: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • CView: ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. CDocument์™€ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ™” ์ƒ์ž ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ์ฃผ๋กœ CDialogEx ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”์ธ ์œˆ๋„์šฐ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋งต(Message Map)๊ณผ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์›๋ฆฌ

์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒคํŠธ ๊ตฌ๋™(Event-Driven) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ(ํด๋ฆญ, ํ‚ค ์ž…๋ ฅ), ์œˆ๋„์šฐ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ(ํฌ๊ธฐ ๋ณ€๊ฒฝ, ์ฐฝ ๋‹ซ๊ธฐ) ๋“ฑ์€ ๋ชจ๋‘ '๋ฉ”์‹œ์ง€(Message)' ํ˜•ํƒœ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. MFC์—์„œ๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด **๋ฉ”์‹œ์ง€ ๋งต(Message Map)**์ด๋ผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ํŠน์ • ๋ฉ”์‹œ์ง€(์˜ˆ: ๋ฒ„ํŠผ ํด๋ฆญ)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜(๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ)๋ฅผ ๋ฉ”์‹œ์ง€ ๋งต์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ON_BN_CLICKED(ID, HandlerFunc)์™€ ๊ฐ™์€ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ปจํŠธ๋กค์˜ ์ด๋ฒคํŠธ๋ฅผ ํ•ด๋‹น ํด๋ž˜์Šค ๋ฉค๋ฒ„ ํ•จ์ˆ˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. Visual Studio๋Š” ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ(Class Wizard)๋ฅผ ํ†ตํ•ด ์ด ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ด ์ฃผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ์†์‰ฝ๊ฒŒ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ํ™œ์šฉํ•œ UI ๋””์ž์ธ ๊ฐ€์†ํ™”

๋Œ€ํ™” ์ƒ์ž(Dialog Box) ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ ํ™œ์šฉ

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๋Œ€ํ™” ์ƒ์ž ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋Š” UI ๋””์ž์ธ์„ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ฉ”์ธ ๋Œ€ํ™” ์ƒ์ž์˜ ๋ ˆ์ด์•„์›ƒ์€ **๋ฆฌ์†Œ์Šค ๋ทฐ(Resource View)**์˜ Dialog ํ•ญ๋ชฉ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, **๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ(Resource Editor)**๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ๋Š” WYSIWYG(What You See Is What You Get) ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜์—ฌ, ๋งˆ์น˜ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋“ฏ์ด ์œˆ๋„์šฐ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค(Control) ๋ฐฐ์น˜ ๋ฐ ์†์„ฑ ์„ค์ •

๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ์—ด๋ฉด ๋„๊ตฌ ์ƒ์ž(Toolbox) ์ฐฝ์—์„œ ๋ฒ„ํŠผ, ์—๋””ํŠธ ๋ฐ•์Šค, ์ฒดํฌ ๋ฐ•์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ํ‘œ์ค€ ์œˆ๋„์šฐ ์ปจํŠธ๋กค๋“ค์„ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ๋Œ€ํ™” ์ƒ์ž์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ปจํŠธ๋กค์„ ์„ ํƒํ•˜๊ณ  **์†์„ฑ ์ฐฝ(Properties Window)**์„ ํ†ตํ•ด ์ปจํŠธ๋กค์˜ ID(์˜ˆ: IDC_BUTTON_CALC), ์บก์…˜(Caption), ํฌ๊ธฐ, ์Šคํƒ€์ผ ๋“ฑ์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ค์ •๋œ ์ปจํŠธ๋กค ID๋Š” ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ์ปจํŠธ๋กค์„ ์‹๋ณ„ํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. UI ๋””์ž์ธ์„ ์ฝ”๋“œ ์ž‘์„ฑ ์ด์ „์— ์‹œ๊ฐ์ ์œผ๋กœ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ˜„์ €ํžˆ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

5. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปจํŠธ๋กค ๋‹ค๋ฃจ๊ธฐ

๋ฒ„ํŠผ(Button) ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: BN_CLICKED

๋ฒ„ํŠผ์€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ๋ฒ„ํŠผ์˜ BN_CLICKED ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ์—์„œ ๋ฒ„ํŠผ์„ ๋”๋ธ” ํด๋ฆญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Visual Studio๊ฐ€ ์ž๋™์œผ๋กœ ํ—ค๋” ํŒŒ์ผ(.h)๊ณผ ์†Œ์Šค ํŒŒ์ผ(.cpp)์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ •์˜์™€ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, void CMyDialog::OnBnClickedButtonCalc() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๊ณ„์‚ฐ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—๋””ํŠธ ์ปจํŠธ๋กค(Edit Control)๋กœ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ

์—๋””ํŠธ ์ปจํŠธ๋กค์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์˜ ์†์„ฑ์—์„œ '์ฝ๊ธฐ ์ „์šฉ(Read-only)' ์„ค์ •์„ ํ†ตํ•ด ์ถœ๋ ฅ ์ „์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋””ํŠธ ์ปจํŠธ๋กค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์ ˆ์—์„œ ์„ค๋ช…ํ•  DDX ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, CEdit ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด GetWindowText()๋‚˜ SetWindowText()์™€ ๊ฐ™์€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์ŠคํŠธ ์ปจํŠธ๋กค(List Control)๋กœ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก ํ‘œ์‹œ

๋ฆฌ์ŠคํŠธ ์ปจํŠธ๋กค(CListCtrl)์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด(Column)๊ณผ ํ–‰(Row)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ชฉ๋ก ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰๊ธฐ์˜ ํŒŒ์ผ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๊ณ (InsertColumn), ๊ฐ ํ–‰์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€(InsertItem)ํ•œ ํ›„, ํ•ด๋‹น ์•„์ดํ…œ์˜ ์„œ๋ธŒ ์•„์ดํ…œ(Sub Item)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๋„ฃ๋Š”(SetItemText) ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ํšจ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์ปจํŠธ๋กค์ž…๋‹ˆ๋‹ค.

6. MFC์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ๋ฐ์ดํ„ฐ ๊ตํ™˜ (DDX/DDV)

DDX(Dialog Data Exchange)๋ฅผ ์ด์šฉํ•œ ์ปจํŠธ๋กค-๋ณ€์ˆ˜ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”

**DDX(Dialog Data Exchange)**๋Š” MFC ๋Œ€ํ™” ์ƒ์ž ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€ํ™” ์ƒ์ž์˜ ์ปจํŠธ๋กค(์˜ˆ: ์—๋””ํŠธ ์ปจํŠธ๋กค, ์ฒดํฌ ๋ฐ•์Šค)์— ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•ด๋‹น ๋Œ€ํ™” ์ƒ์ž ํด๋ž˜์Šค(์˜ˆ: CMyDialog)์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”(๊ตํ™˜)ํ•ด ์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ปจํŠธ๋กค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ฝ๊ฑฐ๋‚˜ ์“ธ ํ•„์š” ์—†์ด, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  UpdateData(FALSE)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด์— ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜, UpdateData(TRUE)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ์ปจํŠธ๋กค ID์˜ ์—ฐ๊ฒฐ์€ ๋Œ€ํ™” ์ƒ์ž ํด๋ž˜์Šค์˜ DoDataExchange ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ DDX_Text, DDX_Check ๋“ฑ์˜ ๋งคํฌ๋กœ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

DDV(Dialog Data Validation)๋ฅผ ์ด์šฉํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ

**DDV(Dialog Data Validation)**๋Š” DDX์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ(์˜ˆ: ์ˆซ์ž์˜ ๋ฒ”์œ„, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด)์„ ์ž๋™์œผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. DDV_MinMaxInt, DDV_MaxChars ๋“ฑ์˜ ๋งคํฌ๋กœ๋ฅผ DoDataExchange ํ•จ์ˆ˜์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DDV๋Š” ์ž˜๋ชป๋œ ์ž…๋ ฅ์ด ๊ฐ์ง€๋˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํ•ด๋‹น ์ปจํŠธ๋กค๋กœ ํฌ์ปค์Šค๋ฅผ ์ด๋™์‹œ์ผœ, ๊ฒฌ๊ณ ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

7. ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘ ์‹ค์Šต ์˜ˆ์ œ: ๊ณ„์‚ฐ๊ธฐ

UI ๊ตฌ์„ฑ ๋ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

๋น ๋ฅธ ์‹ค์Šต์„ ์œ„ํ•ด ๋Œ€ํ™” ์ƒ์ž ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์‚ฌ์น™์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์ œ์ž‘ํ•ด ๋ด…์‹œ๋‹ค.

  1. UI ๊ตฌ์„ฑ: ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ์—์„œ ๋‘ ๊ฐœ์˜ ์ˆซ์ž ์ž…๋ ฅ์šฉ ์—๋””ํŠธ ์ปจํŠธ๋กค(ID: IDC_EDIT_NUM1, IDC_EDIT_NUM2), ๊ฒฐ๊ณผ ์ถœ๋ ฅ์šฉ ์—๋””ํŠธ ์ปจํŠธ๋กค(ID: IDC_EDIT_RESULT), ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์น™์—ฐ์‚ฐ์„ ์œ„ํ•œ 4๊ฐœ์˜ ๋ฒ„ํŠผ(ID: IDC_BUTTON_ADD, IDC_BUTTON_SUB, ...)์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. DDX ๋ณ€์ˆ˜ ์ถ”๊ฐ€: ํด๋ž˜์Šค ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ, ์„ธ ๊ฐœ์˜ ์—๋””ํŠธ ์ปจํŠธ๋กค์— ๋Œ€์‘ํ•˜๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(์˜ˆ: m_fNum1, m_fNum2, m_fResult - ํƒ€์ž…์€ float ๋˜๋Š” double)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  DDX๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์‚ฌ์น™์—ฐ์‚ฐ ๋กœ์ง ๊ตฌํ˜„

๊ฐ ์—ฐ์‚ฐ ๋ฒ„ํŠผ(๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ ๋“ฑ)์„ ๋”๋ธ” ํด๋ฆญํ•˜์—ฌ BN_CLICKED ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋”ํ•˜๊ธฐ ๋ฒ„ํŠผ์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

void CMyDialog::OnBnClickedButtonAdd()
{
    // 1. ํ™”๋ฉด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (DDX ์‚ฌ์šฉ)
    UpdateData(TRUE); 

    // 2. ์‚ฌ์น™์—ฐ์‚ฐ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    m_fResult = m_fNum1 + m_fNum2;

    // 3. ๋ณ€๊ฒฝ๋œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๊ฐ’์„ ํ™”๋ฉด(๊ฒฐ๊ณผ ์—๋””ํŠธ ์ปจํŠธ๋กค)์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. (DDX ์‚ฌ์šฉ)
    UpdateData(FALSE);
}

์ด์™€ ๊ฐ™์ด DDX๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๋ณต์žกํ•œ ์œˆ๋„์šฐ API ํ˜ธ์ถœ ์—†์ด ์„ธ ์ค„์˜ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์ž…์ถœ๋ ฅ๊ณผ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์—ฐ์‚ฐ ๋ฒ„ํŠผ๋“ค๋„ ์ด์™€ ๋™์ผํ•œ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

8. ๊ฒฐ๋ก : MFC๋กœ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฌธ์„ ์—ด๋‹ค

Visual C++ 2017๊ณผ MFC๋ฅผ ํ™œ์šฉํ•œ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ C++์˜ ์„ฑ๋Šฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฆฌ์†Œ์Šค ํŽธ์ง‘๊ธฐ๋ฅผ ํ†ตํ•œ ์ง๊ด€์ ์ธ UI ๋””์ž์ธ๊ณผ DDX/DDV์™€ ๊ฐ™์€ MFC์˜ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ดˆ๋ณด์ž๋„ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณต์žก์„ฑ์„ ํฌ๊ฒŒ ์ค„์ด๊ณ  ํ•ต์‹ฌ ๋กœ์ง ๊ตฌํ˜„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ฐ€์ด๋“œ์—์„œ ์ œ์‹œํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •, MFC์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด, ๊ทธ๋ฆฌ๊ณ  DDX/DDV ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์ˆ™์ง€ํ•œ๋‹ค๋ฉด, ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ์œˆ๋„์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋ฐ”๋กœ Visual Studio 2017์„ ์—ด๊ณ  MFC์˜ ์„ธ๊ณ„์— ๋„์ „ํ•ด ๋ณด์„ธ์š”!

 

๋” ์ž์„ธํ•œ ์ฐธ๊ณ ์ž๋ฃŒ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

 

๋” ์ž์„ธํ•œ ์ฐธ๊ณ ์ž๋ฃŒ ๋ณด๊ธฐ

 

 

๋ฐ˜์‘ํ˜•