Как делали MFC - Делаем CFrameWnd()

Это будет у нас главный класс рамки окна. Именно он будет создавать начальное окно. Естественно что он будет наследником от CWnd. В нем мы спрячем функцию Create. Что бы она вызывалась сама.

gif/9_1.gif (1936 b)

#include "Wnd.h"

class CFrameWnd : public CWnd 
{
public:
	CFrameWnd();
	virtual ~CFrameWnd();

};

А функцию создания мы упрячем в конструктор.

CFrameWnd::CFrameWnd()
{
Create("AfxWin","Step1");
}

Итак, все вроде как нормально, только давайте функции ShowWindow и UpdateWindow сделаем в класс CWnd они будут аналогичные, как и в Win32API. Программиста может захотеть запускать приложение в минимизированном виде.

class CWnd  
{
public:
	..........
	BOOL ShowWindow(int nCmdShow);
	void UpdateWindow();
};

Реализация. Обратите внимание на то, что мы с Вами спрячем дескриптор окна. Вот уже проще чем в Win32 API.

BOOL CWnd::ShowWindow(int nCmdShow)
{ 
	return ::ShowWindow(m_hWnd, nCmdShow);		// именно нашего окна
}

void CWnd::UpdateWindow()
{ 	
	::UpdateWindow(m_hWnd);				// имено нашего окна
}

Теперь удалим эти функции из функции создания окна.

BOOL CWnd::Create(LPCTSTR lpClassName,LPCTSTR lpWindowName)
{
	m_hWnd = CreateWindow(lpClassName,lpWindowName, WS_OVERLAPPEDWINDOW,
		10,10,600,480,NULL,NULL,AfxGetApp()->m_hInstance,NULL);
	if (m_hWnd==NULL) return FALSE;	// окно не создано вернуть ошибку
	return TRUE;			// все нормально
}

Ну и измени нашу проверочную программу.

// TestMyLib.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "HMFC\\WinApp.h"
#include "HMFC\\FrameWnd.h"			// подлючаем класс окно

#pragma comment(lib,"HMFC\\Debug\\HMFC.lib")    // там наш код библиотеки


class CMainWnd : public CFrameWnd
{
};

class CMyApp : public CWinApp
{
public:
	BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
	m_pMainWnd=new  CMainWnd();	// новый обьект
	m_pMainWnd->ShowWindow(SW_SHOW);	// вывести на экран
	m_pMainWnd->UpdateWindow();  
	return TRUE;
}

CMyApp CApp;

И вот он момент истины. Посмотрите "Шаг 1 - Минимальный проект" и Вы увидите, что код практически один к одному, что в MFC шагах.


Загрузить проект | Предыдущий Шаг | Оглавление
Автор Каев Артем - 17.07.2001