Mfc 제03강 코드의 기본 구조

Page 1

Microsoft Foundation Class

호서대학교 컴퓨터공학


Microsoft Foundation Class

고급 프로그래밍 Chapter 3 MFC 코드의 기본 구조

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. 윈도우들의 구성과 기본 구조 CMainFrame Top frame window

CToolBar m_wndToolBar (CMainFrame class member)

Menu CMainFrame window

CCreateDemoView Default view window

CStatusBar m_wndStatusBar (CMainFrame class member)

호서대학교 컴퓨터공학

CWnd m_wndChild (CCreateDemoView class member)


Microsoft Foundation Class 1. 윈도우들의 구성과 기본 구조 CCreateDemoApp CMainFrame

Child & member

m_wndToolBar

m_wndToolBar

Child

CCreateDemoView

CCreateDemoDoc

Child & member m_wndChild

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. 윈도우들의 구성과 기본 구조 AfxGetMainWnd() CFrameWnd::GetActiveView()

CFrameWnd

CWndThread::m_pMainWnd

CMainFrame

CFrameWnd:: GetActiveDocument()

CWnd::GetParentFrame()

CView

AfxGetApp()

CWinApp

CSdiDemoVew

CSdiDemoApp

theApp

CDocument::m_viewList.GetHead()

CDocument CView::GetDocument()

호서대학교 컴퓨터공학

CSdiDemoDoc


Microsoft Foundation Class 2. CWinApp 클래스 CObject CCmdTarget

1. 응용프로그램 자체를 의미하는 클래스 2. 응용 프로그램과 관련 된 많은 정보를 담을 멤버를 가짐

CWinThread CWinApp 호서대학교 컴퓨터공학

3. 운영체제로부터 자원 을 할당 받고 초기화 하는 기능을 담당


Microsoft Foundation Class 2. CWinApp 클래스 멤버 변수

기능

m_hInstance

현재 응용 프로그램의 인스턴스 핸들입니다 . WinMain( ) 함수의 첫 번째 파라미터인 hInstance 와 같은 것입니다 .

m_lpCmdLine

WinMain( ) 함수의 lpCmdLine 파라미터와 같은 것입니다 . 프로그 램을 실행하였을 때 명령줄 (Command-line) 정보가 들어 있습니다 .

m_nCmdShow

WinMain( ) 함수의 마지막 파라미터인 nCmdShow 와 같은 것입니다 .

m_pActiveWnd

응용 프로그램의 최상위 프레임 윈도우에 대한 포인터입니다 . SDI 구 조에서 이 값은 CMainFrame 클래스 객체의 포인터입니다 .

m_pszAppName

m_pszExeName

응용 프로그램의 제목에 해당하는 문자열의 포인터입니다 . CreateDemo 예제의 경우 이 값이 CreateDemo 였습니다 . 문자열의 좀더 정확한 정보는 문자열 테이블 (String Table) 에 들어 있는 AFX_IDS_APP_TITLE 에 해당하는 값입니다 . 빌드한 실행 파일에서 확장자 ( .exe) 를 제외한 파일명입니다 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 3. CFrameWnd 클래스 CObject CCmdTarget CWnd CFrameWnd 호서대학교 컴퓨터공학

1. SDI 구조를 갖는 MFC 프로그램의 최상위 윈 도우 클래스 2. 작성할 프로그램의 기 본 기능 및 틀을 정의 3. 뷰 , 도구모음 , 상태 표시줄 같은 자식 윈 도우를 가짐


Microsoft Foundation Class 3. CFrameWnd 클래스 Menubar window

Toolbar windows

Controlbar windows

호서대학교 컴퓨터공학


Microsoft Foundation Class 3. CFrameWnd 클래스 41 42 43 44 45 46 47 48 49 50 51 52 59 60 61 62 63 64 65 66

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0(" 도구 모음을 만들지 못했습니다 .\n"); return -1; // fail to create } // TODO: 도구 모음을 도킹할 수 없게 하려면 이 세 줄을 삭제하십시오 . m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0;

호서대학교 컴퓨터공학


Microsoft Foundation Class 4. CWnd 클래스

CObject CCmdTarget CWnd

호서대학교 컴퓨터공학

1. MFC 가 제공하는 모든 윈도우 클래스의 기본 기능이 구현된 부모 클래스 2.

윈도우와 관련한 기 본적인 API 들을 모 두 객체화하여 맴버로 가지고 있음 .


Microsoft Foundation Class 4. CWnd 클래스 103 int CCreateDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct) 104 { 105 if (CView::OnCreate(lpCreateStruct) == -1) 106 return -1; 107 108 m_wndChild.Create(TEXT("STATIC"), TEXT("DEMO"), 109 WS_CHILD | WS_VISIBLE | WS_BORDER, 110 CRect(30, 30, 180, 180), this, 1234); 111 112 return 0; 113 }

호서대학교 컴퓨터공학


Microsoft Foundation Class 5. CDocument 클래스

CObject

CCmdTarget

CDocument

호서대학교 컴퓨터공학

1. 응용프로그램 자체를 의미하는 클래스 2. 응용 프로그램과 관련 된 많은 정보를 담을 멤버를 가짐 3. 운영체제로부터 자원 을 할당 받고 초기화 하는 기능을 담당


Microsoft Foundation Class 5. CDocument 클래스 35 36 37 38 39 40 41 42 43 44 45

BOOL CCreateDemoDoc::OnNewDocument( ) { if (!CDocument::OnNewDocument( )) return FALSE; // TODO: 여기에 재초기화 코드를 추가합니다 . // SDI 문서는 이 문서를 다시 사용합니다 . return TRUE; }

호서대학교 컴퓨터공학


Microsoft Foundation Class 5. CDocument 클래스 35 BOOL CHelloSdiDoc::OnNewDocument( ) 36 { 37 if (!CDocument::OnNewDocument( )) 38 return FALSE; 39 40 reinterpret_cast<CEditView*>(m_viewList.GetHead( )) ->SetWindowText(NULL); 41 42 AfxMessageBox(TEXT(" 새로운 빈 문서를 열었습니다 .")); 43 44 return TRUE; 45 } 46

호서대학교 컴퓨터공학


Microsoft Foundation Class 5. CDocument 클래스 74 75 76 77 78 79 80 81 82 83 84

//ChellosdiDoc 명령 BOOL CHelloSdiDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; AfxMessageBox(TEXT(" 사용자가 문서를 열었습니다 .")); return TRUE; }

호서대학교 컴퓨터공학


Microsoft Foundation Class 6. Message map 

메시지에 따른 switch case 증가의 문제점 발생에 따른 해결책

클래스 위저드를 이용해 메시지를 등록 함 .

처리하고자 하는 메시지를 등록 / 해지

메시지 핸들러를 추가 / 삭제하는 부분

메시지 맵 

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

ON_WM_CREATE()

ON_WM_SETFOCUS()

END_MESSAGE_MAP()

호서대학교 컴퓨터공학


Microsoft Foundation Class 6. Message map 14 15 16 17 18 19 20 21 22 94 95 96 97 98 99 100 101

// CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE( ) ON_WM_CLOSE( ) END_MESSAGE_MAP( )

// CMainFrame 메시지 처리기 void CMainFrame::OnClose( ) { AfxMessageBox(TEXT("WM_CLOSE 발생 ")); CFrameWnd::OnClose( ); }

호서대학교 컴퓨터공학


Microsoft Foundation Class 7. Message queue 1 2 3

Key & mouse Message

System queue A

Windows procedure()

B

A

B

Message loop

Application queue Notepad.exe

WindowProc()

6

B

5

B

4 Tackmgr.exe

WindowProc()

호서대학교 컴퓨터공학

A

A


Microsoft Foundation Class Q&A

Q&A 호서대학교 컴퓨터공학


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.