본문 바로가기

통신/데이터통신시스템

[MFC] MFC 전역 함수

전역 함수란(Global Function)?

특정 클래스에 속하지 않고 어디서든지 호출할 수 있는 함수.

함수 이름과 매개변수 리스트로 정의되며, 호출되는 곳에서 독립적으로 존재한다. 전역 함수는 클래스 멤버 함수와 달리 클래스에 속하지 않기 때문에 this 포인터를 사용할 수 없으며, 전역 변수에 대한 접근도 제한된다. 

 

전역 함수를 사용하는 이유?

특정 클래스에 속하지 않는 함수를 편하게 호출할 수 있다. 일반적으로 C++ 네임스페이스를 사용하여 구분하며, MFC에서도 동일한 방식으로 구현된다. ex. C++ printf(), scanf()

 

 

MFC에서 제공하는 일부 전역 함수

함수이름 기능
AfxMessageBox() 메세지 상자를 표시한다.
AfxGetApp() 응용 프로그램 객체의 주소를 리턴
AfxGetMainWnd() 메인 윈도우 객체의 주소를 리턴
AfxGetAppName() 응용 프로그램의 이름을 리턴
AfxGetlnstanceHandle() 인스턴스 핸들을 리턴
AfxRegisterWndClass() 윈도우 클래스를 등록
AfxBeginThread() 스레드를 시작
AfxEndThread() 스레드를 종료

 

함수의 사용 예시 

 

1. AfxMessageBox() 함수

void CMainFrame::OnLButtonDown(UNIT nFlags, CPoint point)
{
	AfxMessageBox(_T("마우스 클릭!"));
}

 

2. AfxGetApp(), AfxGetMainWnd(), AfxGetAppName() 함수

#include <afxwin.h>
#include <locale.h>
....
BOOL ChelloApp::InitInstance()
{
	_tsetlocale(LC_ALL, T(""));
    m_pMainWnd = new CMainFrame;
    m_pMainWnd->ShowWindow(m_nCmdShow);
    return TURE;
}
....

void CMainFrame::OnButtonDown(UNIT nFlags, CPoint point)
{
	TRACE(_T("응용 프로그램 객체 주소 : %p = %p\n"), AfxGetApp(), &theApp);
    TRACE(_T("메인 윈도우 객체 주소 : %p = %p\n"), AfxGetMainWnd(), theApp.m_pManWnd);
    TRACE(_T("응용 프로그램 이름 : %s\n"), AfxGetAppName());
}

 

3. AfxGetlnstanceHandle()

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
	//인스탠스 핸들값은 실행 파일이 로드된 가상 메모리 주소
    TRACE("인스턴스 핸들: %p\n", AfxGetInstanceHandle());
}