#include <afxwin.h>

// MFC를 사용해서 윈도우 프로그램을 작성할 때는 반드시 <afxwin.h> 헤더를 포함시킨다.


#include "Cmmsdk.h"

#include "CmmsdkDef.h"


/*

class CMyWindow : public CWnd

// CWnd의 파생 클래스를 생성.

// PostNcDestroy라는 가상 함수를 재정의. 윈도우가 파괴될 때 MFC 프레임워크에 의해 호출된다.

{

public:

virtual void PostNcDestroy();

};


void CMyWindow::PostNcDestroy()

{

delete this; // 창을 닫을 시 자신의 메모리를 삭제

}

*/


class CMainFrame : public CFrameWnd

// MFC로 윈도우 창을 만들기 위해서는 CFrameWnd에서 파생된 클래스를 만들어야 한다.

{

};


class CMFCTest : public CWinApp

// MFC는 CWinApp라는 클래스를 제공하는데, MFC를 사용하는 모든 윈도우 프로그램은

// CWinApp 클래스의 파생클래스를 반드시 1개 만들어야 한다.

{

public:

virtual BOOL InitInstance();

virtual BOOL ExitInstance();

};


BOOL CMFCTest::InitInstance()

// CWinApp 클래스는 InitInstance() 라는 가상 함수를 제공하며,

// 사용자는 반드시 이 가상함수를 재정의해서 응용 프로그램의 초기화 코드를 만든다.

// 초기화에 성공하면 TRUE를, 실패하면 FALSE를 리턴한다.

// 함수를 재정의 할 때는 CWinApp::InitInstance()를 먼저 한번 호출해야 한다.(언어 관련 리소스 초기화)

{

CWinApp::InitInstance();


//==================================================

// CWnd 윈도우 1

//==================================================

CMainFrame* pFrame = new CMainFrame;

// 사용자가 만든 클래스에 대해서 new를 사용해 객체를 생성한다.

// MFC가 종료될 때 new를 이용해 할당받은 메모리는 자동으로 소거되므로 delete해주지 않아도 된다.


m_pMainWnd = pFrame;

// CWinApp의 멤버 변수인 m_pMainWnd에 반드시 사용자가 만든 윈도우 객체의 주소를 넣어야 한다.

// 윈도우 생성 이후 MFC가 해당 포인터 변수를 이용해 몇 가지 작업을 자동으로 수행한다.\


pFrame->Create( 0, "MFC 테스트!!" );

// 실제 윈도우를 생성하는 함수. 첫 번째 인자에는 윈도우 클래스 이름이 들어가며,

// 0이 전달되면 MFC가 내부적으로 윈도우 클래스를 등록해서 사용하게 된다.


pFrame->ShowWindow( SW_SHOW );

// 윈도우를 보여주기 위해 꼭 사용해야 하는 함수.

// SW_SHOW 부분은 바꾸어서 창의 크기를 조절하는 등의 변경이 가능


pFrame->UpdateWindow();

// 생략해도 되나, 이 함수를 호출해 주면 조금 빠르게 동작하는 것 처럼 보일 수 있다.


/*

//==================================================

// CWnd 윈도우 2

//==================================================

CString classname = AfxRegisterWndClass(

CS_HREDRAW | CS_VREDRAW,

LoadStandardCursor( IDC_ARROW ),

( HBRUSH )::GetStockObject( WHITE_BRUSH ), // WinAPI 함수이므로 앞에 스코프 연산자(::)를 붙인다.

LoadStandardIcon( IDI_APPLICATION ) );

// CFrameWnd를 사용해서 윈도우를 만들 경우 사용자가 직접 윈도우 클래스를 만들지 않아도 MFC가 내부적으로 등록

// CWnd클래스를 사용해서 윈도우를 만들 경우 반드시 윈도우 클래스를 먼저 등록.

// 윈도우 클래스 스타일, 커서, 배경 브러시, 아이콘


CMyWindow * pWnd = new CMyWindow;

pWnd->CreateEx( 0, classname, "CWnd로 만든 윈도우", WS_OVERLAPPEDWINDOW, CRect( 0, 0, 300, 300 ), 0, 0 );

// 확장 윈도우 스타일, 윈도우 클래스 이름(윈도우2), 타이틀 문자열,

// 윈도우 스타일, 윈도우 위치 및 크기, 부모 윈도우 포인터, ID


pWnd->ShowWindow( SW_SHOW );

pWnd->UpdateWindow();

// 화면상에 출력

*/


if( cmmLoadDll() == TRUE ) // DLL로딩 함수 실행

{

AfxMessageBox( "DLL 로딩에 성공하였습니다!!" );

}

else

{

AfxMessageBox( "DLL 로딩에 실패하였습니다!!" );

AfxGetMainWnd()->SendMessage( WM_CLOSE ); // 종료 메시지 보냄

}


return TRUE;

}


BOOL CMFCTest::ExitInstance()

{

cmmUnloadDll();

return CWinApp::ExitInstance();

}


CMFCTest test;

// 사용자가 만든 파생클래스에 대해서 객체를 전역적으로 한 개만 생성해야 한다.



/*

MFC는 내부적으로 WinMain() 함수를 제공한다.

*/

+ Recent posts