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.0552 sec