E D R , A S I H C RSS

MoreMFC

DeleteMe) ๋” ์ด์ƒ ์ž์‹ ์˜ ์ฃผ๋„ํ•˜์— ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์„๊ฒƒ ๊ฐ™์œผ๋ฉด, ๊ทธ๋ƒฅ ํŽ˜์ด์ง€๋ฅผ ์ผ๋ฐ˜ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ข‹์„๋“ฏ ํ•จ.

Programming with Mfc - Jeff prosise (์ฑ… ์š”์•ฝ ์ •๋„ or ์ฑ…์žฅ์‚ฌ.. --;)


1. ๋ชฉํ‘œ & ์žก๋‹ด

์ „์ž์ฑ…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ด€๊ณ„๋กœ, ์›์„œ 70000์›, ํ•œ์„œ 45000์˜ ๊ฑฐ๊ธˆ์€ ๋“คํ•„์š”๊ฐ€ ์—†์—ˆ์Œ.

01.06.2002 ๋ถ€ํ„ฐ ์ง„ํ–‰ ํ• ๊ฒƒ ๊ฐ™์Œ. ํ›„๋”ฑํ›„๋”ฑ ๋ณผ๊ณ„ํš, ๊ทธ๋Ÿฌ๋‚˜ source ๋Š” ๋‹ค์ณ๋ณผ ๊ฒƒ์ž„. -- v ('๋‹น์—ฐํ•œ๊ฑฐ์ง€..')

๊ทธ๋ฆฌ๊ณ , petzold ์•„์ฐŒ์˜ ์ฑ…๋„ ๊ฐ™์ด ์•ฝ๊ฐ„์”ฉ ๋ณด์•„ ๋‚˜๊ฐˆ๊ฒƒ์ž„ ('์˜ˆ์ „์— ๋ณด๊ณ ์‹ถ์€ ๊ฒƒ๋“ค๋งŒ ๋ด์„œ.. ๋ญ”์†Œ๋ฆฐ์ง€ ๋ชจ๋ฆ„. --a')

๊ทธ๋Ÿผ.. to be continue..

--; 1์›” 11์ผ์ด ๋˜์„œ์•ผ ์ฝ๊ธฐ ์‹œ์ž‘.. --;

2. ์ง„ํ–‰ ์ƒํ™ฉ

2.1. 1์›” 11์ผ

  • ์œฝ ๊ดœํ•œ ์‹œ์ž‘์ด์—ˆ๋‚˜?.. ํ˜ผ์ž๋ณด๋ฉด ๊ธˆ๋ฐฉ ๋ณผ๊ฒƒ์„.. (ํ•ด์„ ์•ˆ๋˜๋ฉด skip์ด์ง€.. ) ๊ทธ๋Ÿฐ๋ฐ.. ์š”๋ ‡๊ฒŒ ์ ์œผ๋‹ˆ๊นŒ.. ๋ชฌํ•ด ๋จน๊ฒ ๋„ค.. ใ…‹ใ…‹ ์–ด์จŒ๋“  ํ™”์ดํŒ…์ด๋‹ค.. T-T

3. Programming with MFC

3.1. Chapter1. Hello, MFC

์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ, Window programming์„ ํ• ๋•Œ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์˜ˆ์ œ๋Š”. Hello~ ์‹œ๋ฆฌ์ฆˆ๋‹ค. ๊ทธ source๋ฅผ ํ†ตํ•ด MFCํ”„๋กœ๊ทธ๋žจ์— ์ฒซ๋ฐœ์„ ๋””๋”œ๊ฒƒ์ด๋ฉฐ.. ์š”์ฑ…์— ๋‚˜์˜จ ์œˆ๋„์šฐ์˜ ์ด๋ชจ์ €๋ชจ์— ๊ด€ํ•ด ์„ค๋ช…ํ• ๊ฒƒ์ด๋‹ค. ๋ญ .. ๋Œ€์ถฉ๋Œ€์ถฉ ํ•ด๋‚˜๊ฐˆ ๊ฒƒ์ด์ง€๋งŒ.. ๊ทธ๋Ÿผ.. windows programming์˜ ์„ธ๊ณ„๋กœ. gogogo -- v


dos ์‹œ์ ˆ์˜ ์ ˆ์ฐจ์‹ ํ”„๋กœ๊ทธ๋žจ์˜ ์Šต๊ด€์— ์ –์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•ด ์ด์ฑ…๋„ ์—ญ์‹œ ์•„์ฃผ์ž˜ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์„ค๋ช…ํ•ด ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ทธ๊ฑธ ๋‹ค์‹œ ๋‹ค ์„ค๋ช…ํ•  ํ•„์š”๋Š” ์—†๊ณ .. ๋–กํ•˜๋‹ˆ ๊ทธ๋ฆผ ํ•œ์žฅ์ด๋ฉด ๋‹ค ์„ค๋ช… ๋ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿผ.. image!



image ์„ค๋ช….. -> ๋‚˜์ค‘์—.

..

๊ทธ๋ฆฌ๊ณ , 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"๋ฅผ ๊ทธ๋ฆฐ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ(?)์€ ๋์ด๋‹ค.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:49
Processing time 0.0066 sec