C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как делали MFC - Создаем окно / Как делали MFC / Visual C++

Как делали MFC - Создаем окно

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

class CWnd  
{
public:
	CWnd();
	virtual ~CWnd();
	HWND m_hWnd;				// это окно в стиле С
	BOOL Create(LPCTSTR lpClassName /*имя класса*/, 
			  LPCTSTR lpWindowName /*заголовок окна*/);  
};

И реализация.

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

Все это хорошо только нам нужно передать hInstance процесса а его нет. Но он же был в WinMain. Был. Но мы его не сохранили, а должны были. Будем сохранять. Заводим переменную.

class CWinApp  
{
	......
	BOOL AfxWinInit(HINSTANCE hInst);		// настрока и инициализация приложения
	HINSTANCE m_hInstance;				// наш экзепляр
private:
	......
};

Реализация.

CWinApp::CWinApp()
{
afxCurrentWinApp = this;
m_pMainWnd = NULL;           // пока окна нет
m_hInstance=NULL;	     // мы еще не запущены
}

Пора его сохранить при запуске программы.

BOOL CWinApp::AfxWinInit(HINSTANCE hInst)
{
	m_hInstance=hInst;						// сохраним

	WNDCLASS wndcls;						// структура окна
	......
}

Ну и естественно передать в функцию Create.

#include "stdafx.h"
#include "Wnd.h"
#include "WinApp.h"

......


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;	// окно не создано вернуть ошибку
	ShowWindow(m_hWnd,SW_SHOW);
	UpdateWindow(m_hWnd);
	return TRUE;		// все нормально
}

Загрузить проект | | |
Автор Каев Артем.
[AD]