1. MFC? ¶
Microsoft Foundation Classes λ₯Ό μ€μ¬μ λΆλ₯Έλ€. κΈ°μ μλ ν΄λμ€μ μ§ν©μΌλ‘ Visual C++μ΄ μ΄ ν΄λμ€λ€μ κ°λ°μΌλ‘ νκ³ μλ€. μ΄ ν΄λμ€ κ΅°μ MS Windows APIλ₯Ό λν(Wrapping)νμ¬μ κ°μ²΄μ§ν₯μ μ κ·Όλ²μΌλ‘ νλ‘κ·Έλλ°μ νλλ‘ μ€κ³λμ΄ μλ€. μμ μλ λ³Όλλμμ λ΄λμ OWL(Object Windows Library)λΌλ κ²λ μ°μλ κ±Έλ‘ μλλ°... -_-; μ§κΈμ μ΄λλ‘ κ°λ²λ Έλμ§ λͺ¨λ₯Έλ€. γ
γ
2. MFC notation ¶
MFCμ ν΄λμ€λ€μ CDocument, CViewμ κ°μ΄ Cλ‘ μμνλ μ΄λ¦μ κ°λλ€. λ°μ΄ν° λ©€λ²λ€μλ m_ λΌλ μ λμ΄λ₯Ό λΆμ¬μ λ§λ€μ΄μ Έ μλ€. λ³μμ μ΄λ¦μμ p, i, l, h λ±μ μ΄μ©ν΄μ κ·Έ μ’
λ₯λ₯Ό λ³μμ μ΄λ¦μΌλ‘ μΆμ κ°λ₯νκ² νλ νκ°λ¦¬μνκΈ°λ²μ μ΄μ©νλ€. μ΄λ κ³Όκ±° Cνκ²½νμμ νμ κ²μ¬κΈ°λ₯μ λΆμ¬λ‘ μΈν μλ¬λ₯Ό λ§κΈ°μν΄ κ³ μλ μΈ‘λ©΄μ΄ ν¬κΈ° λλ¬Έμ C++μ λ€μ΄μμλ λ°λμ νμν νκΈ°λ²μ μλλ€.
3. Simple MFC Window ¶
~cpp #include <afxwin.h> //about class library class CExApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CExWnd : public CFrameWnd { public: CExWnd() { Create(0, "MFC Application"); // κΈ°λ³Έμ€μ μΌλ‘ "MFC Application"μ΄λΌλ νμ΄νμ κ°μ§ νλ μμ μμ±νλ€ } }; BOOL CExApp::InitInstance(void) { m_pMainWnd = new CExWnd; // μμ±λ νλ μμ μλμ°μ λΆμΈλ€. m_pMainWnd->ShowWindow(m_nCmdShow); return TRUE; } CExApp Application; // μ΄μ체μ κ° μλμ°λ₯Ό λ§λ€κΈ°μν΄μλ μ΄λ₯Ό μ°Έμ‘°ν μ μ λ³μκ° νμνλ€. //WinMain() ν¨μλ MFC μ ν΄λμ€ μμ ꡬνμ΄ λμ΄μκΈ° λλ¬Έμ APIλ‘ μλμ°λ₯Ό λ§λ€λλ³΄λ€ κ°νΈνκ² μμ±νλ κ²μ΄ κ°λ₯νλ€.
''μ»΄νμΌ ν΄λ³΄κ³ μ νλ λΆλ€μ Project/Setting/General νλͺ©μμ MFC DLLμ μ¬μ©νλ€λ μ€μ μ ν΄μΌνλ€.
κ·Έλ¬μ§ μμ κ²½μ° λ§μ»€κ° λ€μμ μλ¬λ₯Ό λ°μμν¨λ€.
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/ex13_01.exe : fatal error LNK1120: 2 unresolved externals''

6.1. Document ¶
νλμ λ¨μλ‘μ λ€λ£¨μ΄μ§λ νλ‘κ·Έλμμ μ‘΄μ¬νλ νλ‘κ·Έλ¨ λ°μ΄ν°μ λ μ΄λΈ μ λλ‘ μκ°νλ©΄ νΈνλ€. MFCμμλ μ΄λ₯Ό CDocument λΌλ ν΄λμ€λ‘ μ 곡νκ³ νλ‘κ·Έλλ¨Έλ μ΄ ν΄λμ€λ₯Ό μμλ°μμ μκΈ°κ° νμν λ°μ΄ν°νμ μ μνκ³ κ·Έ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ©μλλ₯Ό μμ±νκ² λλ€.
μ΄λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°μ μ μ₯, κ²μμ μμ΄μ MFCκ° μ 곡νλ νμ€μ μΈ λ©μΉ΄λμ¦μ μ΄μ©νλ κ²μ΄ κ°λ₯ν΄μ§λ€.
μμ©νλ‘κ·Έλ¨μμ documentλ₯Ό λͺκ°λ₯Ό λ€λ£¨λλμ λ°λΌμ SDI(single document interface), MDI(multiple document interface)λ‘ κ΅¬λΆνμ¬ μ¬μ©νλ€.
μ΄λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν°μ μ μ₯, κ²μμ μμ΄μ MFCκ° μ 곡νλ νμ€μ μΈ λ©μΉ΄λμ¦μ μ΄μ©νλ κ²μ΄ κ°λ₯ν΄μ§λ€.
6.2. View ¶
Viewλ λνλ¨ΌνΈμ μ‘΄μ¬νλ λ°μ΄ν°μ μ§ν©μ²΄λ₯Ό μ°λ¦¬κ° μνλ λ°©μμΌλ‘ νννλ λ©μΉ΄λμ¦μ΄ ꡬνλ κ°μ²΄μ΄λ€. document μ λ§μ°¬κ°μ§λ‘ CViewλΌλ ν΄λμ€λ₯Ό μμνμ¬ μ¬μ©νκ² λλ€. Viewλ μλμ°μ κ°λ
μΌλ‘ 보μμ νλ μ μλμ° μμμμ ν΄λΌμ΄μΈνΈμ μνλ viewλ§μ μλμ°μμμ ννλλ€. νκ°μ document μ λν΄μ viewλ μ¬λ¬κ°λ‘ λλμ΄μ λ§λ€μ΄μ§λ κ²μ΄ κ°λ₯νλ€.
excelμ μκ°ν΄λ³΄λ©΄ λ κ²μ΄λ€. λμΌν μμΉ λ°μ΄ν°λ₯Ό κ°μ§κ³ μλ‘λ€λ₯Έ κ·Έλν, κ·Έλ¦¬κ³ ν
μ΄λΈμ νμμΌλ‘ λ§λ€μ΄λ΄λ κ²μ΄ κ°λ₯νλ€.
6.3. Link ¶
Document κ°μ²΄λ κ΄κ³λ λ·°λ€μ ν¬μΈν°λ₯Ό 리μ€νΈλ‘ κ΄λ¦¬νλ€. λ·°λ κ΄κ³λ λνλ¨ΌνΈμ λν ν¬μΈν°λ₯Ό μ μ₯ν λ°μ΄ν° λ©€λ² λ³μλ₯Ό κ°κ³ μλ€. νλ μ μλμ°λ νμ¬ νμ±νλ λ·° κ°μ²΄μ λν ν¬μΈν°λ₯Ό κ°λλ€. μ΄λ°μμΌλ‘ μλ‘ λ¬Άμ¬μ νκ°μ μλμ°λ₯Ό νμ±νλ€.
6.3.1. Document Template ¶
λνλ¨ΌνΈ ν
νλ¦Ώ κ°μ²΄λ λ¨μν document λ§μ κ΄λ¦¬νλ κ²μ΄ μλλ€. κ·Έλ€ κ°κ°κ³Ό κ΄κ³λμ΄ μλ μλμ°μ λ·°λ€λ ν¨κ» κ΄λ¦¬νλ€. νλ‘κ·Έλ¨μμ κ°κΈ° λ€λ₯Έ μ’
λ₯μ λνλ¨ΌνΈμ λν΄μ νλμ©μ document templateμ΄ μ‘΄μ¬νλ€. λ§μ½ λμΌν ννμ documentκ° 2κ°μ΄μ μ‘΄μ¬νλ€λ©΄ κ·Έκ²λ€μ κ΄λ¦¬νλλ°μλ νλμ document templateλ§ μμΌλ©΄ λλ€.
νλμ documentμ frame windowλ νκ°μ document templateμ μν΄μ μμ±λλ©° viewλ frame windowκ°μ²΄κ° μμ±λλ©΄μ μλμΌλ‘ μμ±λκ² λλ€.
νλμ documentμ frame windowλ νκ°μ document templateμ μν΄μ μμ±λλ©° viewλ frame windowκ°μ²΄κ° μμ±λλ©΄μ μλμΌλ‘ μμ±λκ² λλ€.
~cpp DocumentTemplateClass : CSingleDocTemplate, CMultiDocTemplate
7. SDI Application Wizard ¶
μμ±λ μ½λμ μ€ν μμ
~cpp μμ©νλ‘κ·Έλ¨ κ°μ²΄ theApp μμ±
~cpp MFCμ μν΄μ κΈ° μ 곡λλ WinMain() μ€ν
~cpp WinMain() μμ InitInstance() μν, document template, main frame window, document, view λ₯Ό μμ±νλ€.
~cpp WinMain() μμ Run() νΈμΆ. Run()μ λ©μΈ λ©μμ§ λ£¨νλ₯Ό μ€ννκ²λλ€. (APIμμ WinProcλ₯Ό μκ°ν΄λ³΄λ©΄ λλ€.)