■MFCアプリケーション骨格

最小限のMFCアプリケーション

// 最小限のMFCプログラム
#include <afxwin.h>

// メインウィンドウクラス
class CMainWin : public CFrameWnd
{
public:
        CMainWin();
        DECLARE_MESSAGE_MAP()
};

// ウィンドウ生成
CMainWin::CMainWin()
{
        Create(NULL, "Title");
}

// アプリケーションクラス
class CApp : public CWinApp
{
public:
        BOOL InitInstance();
};

// アプリケーション初期化
BOOL CApp::InitInstance()
{
        m_pMainWnd = new CMainWin;
        m_pMainWnd->ShowWindow(m_nCmdShow);
        m_pMainWnd->UpdateWindow();

        return TRUE;
}

// アプリケーションのメッセージマップ
BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)
END_MESSAGE_MAP()

CApp App;               // アプリケーションのインスタンスを生成する

実行結果
下記のウインドウが生成される


■MFCクラスの階層

・CObject
・CCmdTarget
・CWinThread
CwinApp
・CWnd
CFrameWnd


■メモ

DECLARE_MESSAGE_MAP() CMainWinクラスのメッセージマップを宣言
メッセージを処理するウインドはこの関数を含まなければならない
クラス内の最後に宣言する必要がある
Create(NULL, "Title") フレームウィンドウの作成
BOOL CFrameWnd::Create(LPCTSTR lpszClassName,
   LPCTSTR lpszWindowName,
   DWORD dwStyle = WS_OVERLAPPEDWINDOW,
   const RECT& rect = rectDefault,
   CWnd* pParentWnd = NULL, // != NULL for popups
   LPCTSTR lpszMenuName = NULL,
   DWORD dwExStyle = 0,
   CCreateContext* pContext = NULL);

最初の二つのパラメータ以外は指定しないとデフォルトが入る
lpszClassName ウィンドウクラスの名前へのポインタを指定、NULLの場合フレームウィンドウの関連付けられたデフォルト
AfxRegisterWndClass()を使って独自ウィンドウクラスの登録が可能
dwStyle ウィンドウのスタイル
WS_OVERLAPPEDWINDOWマクロはシステムメニュー、境界、最小化、最大化、閉じるの各ボタンを備えた標準のウインドウを指定
RECT構造体
typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;


InitInstance() 仮想関数
オーバーライドさせている
プログラムの新しいインスタンスが起動されるたびに呼び出される
成功:非ゼロ 失敗:0
m_pMainWnd CWnd* CWinThread::m_pMainWnd
ShowWindow ウィンドウを以前の表示状態に返す ウインドウが表示されていた場合:非ゼロ ない場合:0
BOOL CWnd::ShowWindow(int nCmdShow)
表示マクロ 機能
SW_HIDE ウィンドウを消去する
SW_MAXIMIZE ウィンドウを最大化する
SW_MINIMIZE ウィンドウを最小化する
SW_SHOW ウィンドウを表示する
SW_RESTORE ウィンドウを元のサイズに戻す
m_nCmdShow int CWinApp::m_nCmdShow
UpdateWindow() メインウィンドウの更新が必要であるというメッセージをアプリケーションに送るようにWindowsに指示する関数