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"๋ฅผ ๊ทธ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ฉด ์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ(?)์ ๋์ด๋ค.