MFC

[MFC] AfxGetApp() 와 AfxGetMainWnd()

FORHAPPy 2022. 1. 5. 21:52

윈도우즈 프로그램의 기본적인 실행 구조는 다음과 같다. 

 

실행파일을 실행 시키면 하나의 프로세스가 생성된다. 

프로세스는 단독으로 수행될 수 없고 스레드에 의해 수행된다. 

스레드는 프로세스의 메모리 공간을 수행할 책임을 갖게 된다. 

프로세스는 하나 이상의 스레드를 갖으면 최초의 스레드를 Primary Thread 라고 부른다. 

 

MFC로 만든 응용 프로그램 역시 윈도우즈 프로그램이므로 하나 이상의 스레드를 갖는다. 

Primary Thread 역할을 하는 것으 CWinApp 클래스의 파생클래스인 CXXApp 클래스가 스레드를 생성한다. 

CToolApp 같은 최종 보여지는 클래스를 말한다. 

자세히 말하면 MFC 응용프로그램의 유일한 전역 객체인 CXXApp의 객체가 진입점 함수(WinMain, wWinMain) 함수를 실행 시키게 된다. (진입점 함수는 C/C++ 런타임 시작함수가 호출한다.)

 

 

😊AfxGetApp() - 전역함수로 쓰인다. 이 함수를 호출 하게 되면 MFC응용프로그램의 최초로 생성된 스레드의 app을 반환해 준다. 반환 타입이 CWinApp* 이므로 사용할 타입으로 캐스팅 해서 사용한다.

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

::AfxGetApp()->m_pMainWnd;와 같이 멤버변수값을 참조 또는 멤버함수를 호출하여 값을 얻을 수도 있다. 

::AfxGetApp()->GetMainWnd();

 

😊AfxGetMainWnd() - 현재 스레드의 메인 윈도우 핸들을 리턴한다. 단일 스레드 프로그램의 경우 ::AfxGetApp()->GetMainWnd(); 와 같은 결과를 얻을 수 있다. 하지만 멀티 스레드일 경우 주의 해서 사용해야 한다. 

 

 

 

 

 

 

 

참고

https://six605.tistory.com/261

 

AfxGetApp() 와 AfxGetMainWnd()

윈도우즈 프로그램의 기본적인 실행 구조는 다음과 같다. 실행 파일을 실행 시키면 하나의 프로세스가 생성 된다. 프로세스는 단독으로 수행될 수 없고 스레드에 의해 수행된다. 스레드는 프로

six605.tistory.com