DeleteMe) λ μ΄μ μμ μ μ£Όλνμ μ§νν μ μμκ² κ°μΌλ©΄, κ·Έλ₯ νμ΄μ§λ₯Ό μΌλ°νμν€λ κ²μ΄ μ’μλ― ν¨.
Programming with Mfc - Jeff prosise (μ±
μμ½ μ λ or μ±
μ₯μ¬.. --;)
1. λͺ©ν & μ‘λ΄ ¶
μ μμ±
μ κ°μ§κ³ μλ κ΄κ³λ‘, μμ 70000μ, νμ 45000μ κ±°κΈμ λ€νμκ° μμμ.
01.06.2002 λΆν° μ§ν ν κ² κ°μ. νλ±νλ± λ³Όκ³ν, κ·Έλ¬λ source λ λ€μ³λ³Ό κ²μ. -- v ('λΉμ°νκ±°μ§..')
κ·Έλ¦¬κ³ , petzold μμ°μ μ± λ κ°μ΄ μ½κ°μ© 보μ λκ°κ²μ ('μμ μ λ³΄κ³ μΆμ κ²λ€λ§ λ΄μ.. λμλ¦°μ§ λͺ¨λ¦. --a')
κ·ΈλΌ.. to be continue..
--; 1μ 11μΌμ΄ λμμΌ μ½κΈ° μμ.. --;
01.06.2002 λΆν° μ§ν ν κ² κ°μ. νλ±νλ± λ³Όκ³ν, κ·Έλ¬λ source λ λ€μ³λ³Ό κ²μ. -- v ('λΉμ°νκ±°μ§..')
κ·Έλ¦¬κ³ , petzold μμ°μ μ± λ κ°μ΄ μ½κ°μ© 보μ λκ°κ²μ ('μμ μ λ³΄κ³ μΆμ κ²λ€λ§ λ΄μ.. λμλ¦°μ§ λͺ¨λ¦. --a')
κ·ΈλΌ.. to be continue..
--; 1μ 11μΌμ΄ λμμΌ μ½κΈ° μμ.. --;
2.1. 1μ 11μΌ ¶
- μ½ κ΄ν μμμ΄μλ?.. νΌμ보면 κΈλ°© λ³Όκ²μ.. (ν΄μ μλλ©΄ skipμ΄μ§.. ) κ·Έλ°λ°.. μλ κ² μ μΌλκΉ.. λͺ¬ν΄ λ¨Ήκ² λ€.. γ
γ
μ΄μ¨λ νμ΄ν
μ΄λ€.. T-T
3.1. Chapter1. Hello, MFC ¶
μΈμ λ κ·Έλ λ―, Window programmingμ ν λ μ²μ λ±μ₯νλ μμ λ. Hello~ μ리μ¦λ€. κ·Έ sourceλ₯Ό ν΅ν΄ MFCνλ‘κ·Έλ¨μ 첫λ°μ λλκ²μ΄λ©°.. μμ±
μ λμ¨ μλμ°μ μ΄λͺ¨μ λͺ¨μ κ΄ν΄ μ€λͺ
ν κ²μ΄λ€. λ .. λμΆ©λμΆ© ν΄λκ° κ²μ΄μ§λ§.. κ·ΈλΌ.. windows programmingμ μΈκ³λ‘. gogogo -- v
dos μμ μ μ μ°¨μ νλ‘κ·Έλ¨μ μ΅κ΄μ μ μ νλ‘κ·Έλλ¨Έλ₯Ό μν΄ μ΄μ± λ μμ μμ£Όμ μλμ° νλ‘κ·Έλλ°μ΄ μ΄λ»κ² λ€λ₯Έμ§ μ€λͺ ν΄ μ€λ€. κ·Έλ¬λ, κ·Έκ±Έ λ€μ λ€ μ€λͺ ν νμλ μκ³ .. λ‘νλ κ·Έλ¦Ό νμ₯μ΄λ©΄ λ€ μ€λͺ λ κ² κ°λ€. κ·ΈλΌ.. image!
dos μμ μ μ μ°¨μ νλ‘κ·Έλ¨μ μ΅κ΄μ μ μ νλ‘κ·Έλλ¨Έλ₯Ό μν΄ μ΄μ± λ μμ μμ£Όμ μλμ° νλ‘κ·Έλλ°μ΄ μ΄λ»κ² λ€λ₯Έμ§ μ€λͺ ν΄ μ€λ€. κ·Έλ¬λ, κ·Έκ±Έ λ€μ λ€ μ€λͺ ν νμλ μκ³ .. λ‘νλ κ·Έλ¦Ό νμ₯μ΄λ©΄ λ€ μ€λͺ λ κ² κ°λ€. κ·ΈλΌ.. image!
image μ€λͺ
.. -> λμ€μ.
..
κ·Έλ¦¬κ³ , MFCλ₯Ό νκΈ°μ μ κΌ νλ²μ© λμ€λ SDKλ‘ νλ windows programming. source.
MFCμ체λ μ΄λ° WinMainμ΄λ WndProc λ κ°μΆμ§λ§ λ°λ¨μμ μ΄λ° μμΌλ‘ λμκ°λ€λ κ²μ μ‘°κΈμ΄λΌλ μκ² νκΈ° μν΄μ ν¬ν¨. 무μν΄λ μκ΄ μμ. γ γ
...
κ·Έλ¦¬κ³ , κ·Έ λ€μμΌλ‘ μ§νλλ κ²μ΄. CMainWindowμ μλ OnPaintλΌλ ν¨μ. windowμ client μμμ 무μΈκ°λ₯Ό 그리λ ν¨μκ° νΈμΆλλ€. (κ·Έ μ μ μ΄κ² μ κ² λ§μ΄ μκ² μ§λ§... λ λ§€ν¬λ‘λ₯Ό ν΅ν΄ messagemap κ΄λ ¨ entryλΌλμ§.. μ΄λ°κ²λ€μ μ μΈν΄ μ£Όλ μμ .. --a) κ·Έλμ, DrawTextλ₯Ό μ΄μ©ν΄ νλ©΄ μ€μμ "Hello, MFC"λ₯Ό κ·Έλ¦°λ€. κ·Έλ¬λ©΄ μ΄ νλ‘κ·Έλ¨μ κΈ°λ₯(?)μ λμ΄λ€.
..
κ·Έλ¦¬κ³ , MFCλ₯Ό νκΈ°μ μ κΌ νλ²μ© λμ€λ SDKλ‘ νλ windows programming. source.
MFCμ체λ μ΄λ° WinMainμ΄λ WndProc λ κ°μΆμ§λ§ λ°λ¨μμ μ΄λ° μμΌλ‘ λμκ°λ€λ κ²μ μ‘°κΈμ΄λΌλ μκ² νκΈ° μν΄μ ν¬ν¨. 무μν΄λ μκ΄ μμ. γ γ
~cpp // μ£Όμ μμ.. κ·Έλ₯.. WinMainκ³Ό WndProcκ° μꡬλλ§ λ³΄κ³ λμ΄ κ°μκΈΈ.. ν€ν€ // κΆκΈνλ©΄ μ°Ύμ 보μλΌμ°~ #include <windows.h> int WINAPI WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wc; HWND hWnd; MSG msg; wc.style = 0; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = _T("MyWndClass"); RegisterClass (&wc); hwnd = CreateWindow (_T("MyWndClass"), "SDK Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInstance, NULL ); // windowλ₯Ό λ§λ€μμ§λ§ 보μ΄μ§λ μλλ€. ShowWindow (hWnd, nCmdShow); // window 보μ¬μ£ΌκΈ°. --; UpdateWindow (hWnd); while (GetMessage (&msg, NULL, 0, 0)) { // 무ν 루νλ₯Ό λλ©΄μ message νμ μλ messageλ₯Ό κ°μ Έμ¨λ€. // WM_QUIT messageκ° λ°μνλ©΄ GetMessageκ° 0μ λ°ννμ¬ νλ‘κ·Έλ¨ μ’ λ£. TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // μ΄λ κ² μ보μ΄λ κ³³μ WinMainκ³Ό WndProcλΌλ κ²μ΄ μ‘΄μ¬ν΄μ, messageλ₯Ό λ°μμ μ²λ¦¬νλ€. // μμΈνκ²μ charles petzoldμ Programming WindowsλΌλ μ± μ 보면 μμ² μλμ μλ€. --; // κ·Έ μ± λ λ€μ νλ² νν° λ΄μΌ κ² λ€. T-T μ²μμ μ λλ‘ λ³Όκ±Έ.. λ€μ λ³΄κ² λλ€λ.. T-Tκ·ΈλΌ μ΄μ μ΄ μ± μμ μ²μ λμ€λ MFC programming sourceλ₯Ό.. κ³΅κ° νλ€. Dialog basedλ‘ νλ‘μ νΈλ₯Ό μ°ν Dialogμ κ΄ν classλ projectμμ λΊν Appν΄λμ€λ΄μ μ΄ sourceλ₯Ό μ³μ£Όλ©΄ λ κ²μ΄λ€. - μ κΈ° νκ²λ App classμ MainWindowν΄λμ€λ§ μλ€. μ΄λ° sourceλ μ²μ λ΄μ μμ νμ§λ§, MFCμμ μ 곡ν΄μ£Όλ source보λ€λ κΉλν΄ λ³΄μλ€.-
~cpp // hello.h class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; class CMainWindow : public CFrameWnd { public: CMainWindow (); protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP () }; // hello.cpp #include <afxwin.h> #include "Hello.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp member functions // νλ‘κ·Έλ¨μ μ΄κΈ°ν ν μ μλ κ°μ₯ μ μ ν μ₯μ. --a // CWinApp::InitInstanceλ₯Ό overrideν κ°μν¨μμ΄λ€. BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; // μλμ° μμ± m_pMainWnd->ShowWindow (m_nCmdShow); // m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT () END_MESSAGE_MAP () CMainWindow::CMainWindow () { Create (NULL, _T ("The Hello Application")); } void CMainWindow::OnPaint () { CPaintDC dc (this); CRect rect; GetClientRect (&rect); dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); }λ‘νλ sourceλ₯Ό 보면 μ΄λ»κ² λμκ°λ κ±°μΌ.. --; λΌλ μκ°μ΄ λ λ€.. λλ μλͺ¨λ₯Έλ€. κ·Έλ°λ° κ°μ₯ μ€μνκ²μ globalμμμ myAppλΌλ λ³μκ° μ μΈλμ΄ μλ€λ μ¬μ€μ΄λ€. myApp λΌλ instanceκ° μ΄ νλ‘κ·Έλ¨μ instanceμ΄λ€. --a (μ΅μ΄μ νλ‘κ·Έλ¨μΌλ‘ μΈμ€ν΄μ€ν..) κ·Έλ¦¬κ³ , CWinAppλ₯Ό μμν CMyAppμ μλ μ μΌν ν¨μ initInstance μμ μ€μ windowλ₯Ό λ§λ€μ΄μ€λ€.(InitInstanceν¨μλ μμ© νλ‘κ·Έλ¨μ΄ μ²μ μκΈΈ λ, 곑 windowκ° μμ±λκΈ°μ , μμ© νλ‘κ·Έλ¨μ΄ μμν λ°λ‘ λ€μμ νΈμΆλλ€) μ΄ λΆλΆμμ CMainWindowμ instanceλ₯Ό λ§λ€μ΄ λ©€λ² λ³μμΈ m_pMainWndλ‘ pointingνλ€. μ΄μ windowλ μμ± λμλ€. κ·Έλ μ§λ§, κΈ°μ΅ν΄μΌ ν κ²μ΄ μμ§ windowλ 보μ΄μ§ μλλ€λ μ¬μ€μ΄λ€. κ·Έλμ, CMainWindowμ pointer(m_pMainWindow)λ₯Ό ν΅ν΄μ ShowWindowμ UpdateWindowλ₯Ό νΈμΆν΄ μ€λ€. κ·Έλ¦¬κ³ TRUEλ₯Ό return ν¨μΌλ‘μ¨ λ€μ μμ μΌλ‘ μ§ν ν μ μκ² ν΄μ€λ€.... ν. μμλΌ λμλ¦°μ§ νλλ λͺ¨λ₯΄κ² λ€~ μΊ¬μΊ¬.. to be continue..
...
κ·Έλ¦¬κ³ , κ·Έ λ€μμΌλ‘ μ§νλλ κ²μ΄. CMainWindowμ μλ OnPaintλΌλ ν¨μ. windowμ client μμμ 무μΈκ°λ₯Ό 그리λ ν¨μκ° νΈμΆλλ€. (κ·Έ μ μ μ΄κ² μ κ² λ§μ΄ μκ² μ§λ§... λ λ§€ν¬λ‘λ₯Ό ν΅ν΄ messagemap κ΄λ ¨ entryλΌλμ§.. μ΄λ°κ²λ€μ μ μΈν΄ μ£Όλ μμ .. --a) κ·Έλμ, DrawTextλ₯Ό μ΄μ©ν΄ νλ©΄ μ€μμ "Hello, MFC"λ₯Ό κ·Έλ¦°λ€. κ·Έλ¬λ©΄ μ΄ νλ‘κ·Έλ¨μ κΈ°λ₯(?)μ λμ΄λ€.