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 |