AfxGetapp() 이란?


우선 MFC로 프로그램을 만들면, 다음과 같이 클래스가 생성되며, 프로젝트 명을 Test라고 가정해 봅시다.

  • CTestApp - CWinApp 클래스를 상속, 프로그램 초기화 클래스 (InitInstance)

  • CMainFrame - CFrameWnd 클래스를 상속, 전체 윈도우 관련 클래스

  • CTestDoc - CDocument 클래스를 상속, 문서 관련 클래스(Open, Save, Serialize)

  • CTestView - CView 클래스를 상속, 사용자 화면 클래스(OnPaint, OnDraw)

  • CAboutDlg - CDialog 클래스를 상속, 도움말 대화 상자 클래스(DoModal)


어느 곳에서나 CTestApp의 포인터를 얻고자 한다면 AfxGetApp()를 호출합니다.

AfxGetApp()은 전역 함수이므로 어느 곳에서나 호출이 가능합니다.


CTestApp* pApp = AfxGetApp();

위와 같이 코딩을 하게 되면, 에러가 발생하오니 아래와 같이 코딩합시다.

CTestApp* pApp = (CTestApp*)AfxGetApp();

AfxGetApp() 전역 함수를 호출하게 되면 MFC 응용프로그램의 최초에 생성된 스레드의 app 를 반환해 줍니다.

반환 타입이 CWinApp * 이므로 사용할때는 사용할 타입의 타입 캐스팅을 해주어야 합니다.


CTestApp 클래스의 선언 부분에 포함(include)을 시키지 않으면 에러가 발생할 수 있는데, 이럴 때는 CTestApp 클래스의 선언을 다음처럼 포함시켜야 합니다.


#include "Test.h"


 메인 스레드의 메인 윈도우 객체 포인터를 얻기 위해선

::AfxGetApp()->m_pMainWnd;

와 같이 m_pMainWnd 멤버 변수 값을 참조 하면 됩니다.


또는

::AfxGetApp()->GetMainWnd(); 

멤버 함수를 호출하여 값을 얻을 수도 있습니다.





출처


AfxGetApp() 와 AfxGetMainWnd()

MFC 클래스 포인터 얻어오기


'Programming > [MFC]' 카테고리의 다른 글

MFC 프로그래밍 기초  (0) 2018.02.19
[MFC/기초] entry point  (0) 2018.02.07
블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,