Это будет у нас главный класс рамки окна. Именно он будет создавать начальное окно. Естественно что он будет наследником от CWnd. В нем мы спрячем функцию Create. Что бы она вызывалась сама.
#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 шагах.