Mfc 제04강 코드의 흐름

Page 1

호서대학교 컴퓨터공학

1


Microsoft Foundation Class

고급 프로그래밍 Chapter 4 MFC 코드의 흐름

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

응용 프로그램의 시작되는 시점

응용 프로그램을 실행시켜 메시지 루프가 활성화 되는 시점 .

메시지 루프가 활성화 된 상태에서는 모든 초기화가 끝남 .

모니터 상에서 응용 프로그램의 출력 상태를 확인할 수 있음 .

응용 프로그램의 시작 함수

윈도우 응용 프로그램의 시작은 모두 WinMain() 함수로 시작 .

InitInstance() 함수는 내부적으로 WinMain() 함수를 호출함 .

MFC 에서는 WinMain() 함수를 수정할 필요도 할 수도 없음 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

InitInstance() 함수

응용 프로그램의 초기화와 관련된 코드를 넣을 수 있음 .

InitInstance() 함수에서 설정 가능한 내용 . •

응용프로그램의 설정 정보 로딩 ( 윈도우 크기 , 옵션 , 스타일 등 )

응용 프로그램의 중복 실행 방지

시험 버전의 기간 검사 루틴

운영체제 버전의 확인과 프로그램 실행 허용 여부

프로그램 사용자의 인증 ( ID / PASSWORD )

프로그램 실행 시 인자로 전달되는 파라미터 처리 등

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

응용 프로그램의 생성되는 순서

CSdiSeqDoc 클래스 객체 생성 .

CMainFrame 클래스 객체 생성 .

CSdiSeqView 클래스 객체 생성 .

각 클래스들간의 호출

실행되는 함수들은 내부적으로 다른 클래스의 함수를 호출 .

직접적인 함수 호출과 메시지 발생을 이용한 호출이 있음 .

WM_CRATE 메시지에 의해 실행된 OnCreate() 함수는 OnCreateClient() 함수를 호출 함 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12:

Function: CSdiSeqApp::CSdiSeqApp( ) Function: CSdiSeqApp::InitInstance( ) Function: CSdiSeqDoc::CSdiSeqDoc(void) Function: CMainFrame::CMainFrame(void) Function: CMainFrame::LoadFrame( ) Function: CMainFrame::PreCreateWindow( ) Function: CMainFrame::PreCreateWindow( ) Function: CMainFrame::OnCreate( ) Function: CMainFrame::OnCreateClient( ) Function: CSdiSeqView::CSdiSeqView( ) Function: CSdiSeqView::Create( ) Function: CSdiSeqView::PreCreateWindow( )

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:

Function: CSdiSeqView::OnCreate( ) Function: CSdiSeqView::OnShowWindow( ) CMainFrame::OnCreateClient( ) - Return CMainFrame::OnCreate( ) – Return Function: CSdiSeqDoc::OnNewDocument( ) Function: CSdiSeqView::OnInitialUpdate( ) Function: CMainFrame::OnActivateApp( ) Function: CMainFrame::OnActivate( ) Function: CMainFrame::OnShowWindow( ) Function: CSdiSeqView::GetDocument( ) Function: CSdiSeqApp::Run( )

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

InitInstance( )

MFC 에서 매우 중요한 함수 .

응용 프로그램이 초기화되는 부분이며 , 이와 관련한 코드들이 집결 되는 곳 ( 윈도우 크기 , 옵션 등 ).

OnCreate( )

WM_CREATE 메시지를 받았을 때 호출되는 메시지 핸들러 .

LoadFrame() 함수가 호출되면 자동으로 발생 .

OnCreateClient() 함수를 호출 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

OnCreateClient( )

상위 클래스의 명시적 호출로 인해 호출되는 함수 .

클라이언트 뷰를 생성 .

Create() 함수를 호출 .

OnInitialUpdate( )

WM_INITALUPDATE 메시지에 의하여 동작하는 핸들러 .

클라이언트 뷰의 생성이 완료되면 응용 프로그램의 프레임 윈도우는 자신의 클라이언트 뷰에 메시지 전달 .

새로운 문서가 열릴 때마다 호출 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

Run( )

응용 프로그램 객체의 메시지 루프를 시작하는 함수 .

내부적으로 PeekMessage() 함수를 호출하여 자신에게 메시지가 있 는지 없는지를 검사 함 .

OnIdle() 함수는 메시지 큐가 비었을 때 호출되는 함수 .

비어있는 메시지 큐에 메시지가 발생하면 PumpMessage 멤버 함수 를 호출 .

PumpMessage 함수는 CWinThread 의 멤버 함수로써 

:: GetMessage, ::TranslateMessage, ::DispatchMessage 등의

함수를 루프를 돌면서 호출 함 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 2. MFC 응용 프로그램의 종료 

응용 프로그램의 종료되는 시점

WM_QUIT 메시지를 받아 메시지 루프가 종료 되는 시점 .

Alt + F4, 닫기 버튼 (X), 파일 - 종료 등의 이벤트에 의해 발생 .

WM_CLOSE, WM_DESTROY 메시지와 같은 역할을 함 .

응용 프로그램의 종료되는 순서

종료 할 응용프로그램을 활성화 시킴 .

자식 윈도우를 먼저 종료하고 부모 윈도우가 종료 됨 .

응용 프로그램 초기화의 역순으로 종료 됨 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 2. MFC 응용 프로그램의 종료 24: Function: CMainFrame::OnClose( ) 25: Function: CMainFrame::OnShowWindow( ) 26: Function: CMainFrame::OnActivate( ) 27: Function: CMainFrame::OnActivateApp( ) 28: Function: CMainFrame::DestroyWindow( ) 29: Function: CMainFrame::OnDestroy( ) 30: Function: CSdiSeqView::OnDestroy( ) 31: Function: CSdiSeqView::PostNcDestroy( ) 32: Function: CSdiSeqView::~CSdiSeqView( ) 33: Function: CMainFrame::OnNcDestroy( ) 34: Function: CMainFrame::PostNcDestroy( )

호서대학교 컴퓨터공학


Microsoft Foundation Class 2. MFC 응용 프로그램의 종료 35: Function: CMainFrame::~CMainFrame( ) 36: CMainFrame::OnNcDestroy( ) - Return 37: Function: CSdiSeqDoc::~CSdiSeqDoc( ) 38: CMainFrame::OnClose( ) - Return 39: Function: CSdiSeqApp::ExitInstance( ) 40: CSdiSeqApp::Run( ) - Return

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

OnClose( )

Alt +F4, 닫기 버튼 (X), 파일 - 종료를 누를 때 발생되는 WM_CLOSE 메시지에 의해 호출되는 함수 .

OnClose() 함수가 호출될 때 자원의 반납이나 차일드 윈도우의 내용 을 저장하는 일 발생 .

최상위 윈도우인 프레임 윈도우에 붙어 있는 차일드 윈도우들이 이 시점에서 파괴 .

내부적으로 DestroyWindow() 함수를 호출하여 WM_DESTROY 메 시지를 발생시키고 OnDestroy() 함수를 호출함 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

OnDestroy( )

DestroyWindow() 함수가 보낸 WM_DESTROY 메시지를 받아 호출 되는 핸들러 .

OnClose() 나 OnDestroy() 함수와 비슷함 .

OnDestroy() 함수에서 클라이언트 뷰와 같은 차일드 윈도우의 파괴 가 시작 .

차일드 윈도우에 WM_DESTROY 메시지를 보내서 파괴를 알림 .

OnNcDestroy( )

PostNcDestroy() 함수는 Non-Client 영역을 파괴 함 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 1. MFC 응용 프로그램의 시작 

ExitInstance( )

모든 객체들이 소멸한 가운데 응용 프로그램의 최종 종료에 앞서서 마지막으로 호출되는 함수 .

응용 프로그램의 설정을 저장한다거나 중복 실행 방지를 위해 획득 했던 시스템 리소스를 반납 하거나 메모리를 해제 하는 등 최종 마무 리 작업 시행 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 3. 윈도우 영역의 구분 Client view window Client area

Non-client area Frame window Client area

Non-client area

호서대학교 컴퓨터공학


Microsoft Foundation Class 4. 메시지의 발생과 처리 

MFC 에서의 메시지

하나의 메시지에 대해 여러 곳에서 처리가 가능 .

메시지는 메시지 핸들러 함수를 등록하여 처리 .

메시지를 처리만 하는 것이 아니라 직접 메시지 발생 가능 .

메시지 핸들러를 이용한 메시지 처리 예 

WM_CREATE = 메시지 핸들러로 OnCreate() 함수 등 록.

WM_CLOSE = 메시지 핸들러로 OnClose() 함수 등록 .

WM = 윈도우 메시지 , On = 윈도우 메시지 처리 함수 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 4. 메시지의 발생과 처리 메시지 탭

윈도우 메시 지 함수 등록 호서대학교 컴퓨터공학


Microsoft Foundation Class 4. 메시지의 발생과 처리 

SendMessage() 함수

보내고자 하는 메시지를 메시지큐에 추가하지 않음 .

메시지와 관련된 함수를 직접적으로 호출하고 결과를 반환 .

PreTranslateMessage() 함수를 이용하여 필터링 할 수 없음 .

PostMessage() 함수

보내고자 하는 메시지를 메시지큐에 추가하는 함수 .

메시지 큐에 메시지를 추가하면 반환 .

PreTranslateMessage() 함수를 이용하여 필터링 할 수 있음 .

호서대학교 컴퓨터공학


Microsoft Foundation Class 4. 메시지의 발생과 처리 Message queue 2

1 A

B

C

PostMessage()

D

SendMessage() Message loop 3

CMainFrame CMainFrame::PreTranslateMessage() 4 CMainFrame::WindowProc() 5 CMainFrame message handler function

호서대학교 컴퓨터공학


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.