www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 21 - Минимальный проект докумен-вид

Создание проекта

Лучше создать новый проект Win32 с использованием MFC. Можете оставить старый, но для этого необходимо удалить всё. Вообщем рекомендую создать новый с именем Apps. Не забудьте подключить MFC, как статическую библиотеку.

AppWizard Создает код, который интенсивно обращается к ресурсам. Обращение к ним происходит на основе имен. И если мы его эмулируем, то должны пользоваться теми же именами.

В проект должно быть три файла - CPP,RC,Resource.h. Последний создается сам, при создании файла RC. Я рекомедную его включить через Add File to Project после создания файла ресурсов.

Создаем файл ресурсов и в нем меню с идентификатором IDR_MAINFRAME и строковым ресурсом AFX_IDS_UNTITLED, он испозуется для задания имени приложения в левом верхнем углу. Если его не будет, то при выполнении вы получите сообщение об ошибке.

В реализации MFC есть код

void CSingleDocTemplate::SetDefaultTitle(CDocument* pDocument)
{
  CString strDocName;
  if (!GetDocString(strDocName, CDocTemplate::docName) || 
      strDocName.IsEmpty())
  {
     VERIFY(strDocName.LoadString(AFX_IDS_UNTITLED));
  }
  pDocument->SetTitle(strDocName);
}
Это проверка установки имени документа по умолчанию на основе строкового ресурса AFX_IDS_UNTITLED.
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther)
{
	if (pDoc != NULL)
		ASSERT_VALID(pDoc);
	ASSERT(m_nIDResource != 0);// Здесь передается число  и 
                      //если этого ресурса нет то ошибка
При создании рамки окна проверяется наличие ресуса с именем IDR_MAINFRAME

Создаем код

#include "afxwin.h"
#include "resource.h" // идентификаторов подключение ресурсов

class CMyView : public CView // класс просмотр
{
protected: 
	CMyView();						
	DECLARE_DYNCREATE(CMyView)		
public:
	virtual void OnDraw(CDC* pDC);
};

void CMyView::OnDraw(CDC* pDC)	 // она для отрисовки просмотра	
{
}

IMPLEMENT_DYNCREATE(CMyView, CView)

CMyView::CMyView()					
{
}


class CMainFrame : public CFrameWnd	// класс рамки окна	
{
protected:							
	CMainFrame();					
	DECLARE_DYNCREATE(CMainFrame)	
public:
};


IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

CMainFrame::CMainFrame()				
{	
}

class CMyDoc : public CDocument	 // класс документа
{
protected: 
	CMyDoc();						
	DECLARE_DYNCREATE(CMyDoc)		
public:
};

IMPLEMENT_DYNCREATE(CMyDoc,	CDocument)

CMyDoc::CMyDoc()					
{
}

class CStep2App : public CWinApp
{
public:
	CStep2App();					
	virtual BOOL InitInstance();
};



BOOL CStep2App::InitInstance()						
{
	CSingleDocTemplate* pDocTemplate;	// новый шаблон
	pDocTemplate = new CSingleDocTemplate(	       
		IDR_MAINFRAME,			// идентификатор меню		
		RUNTIME_CLASS(CMyDoc),		// документ	
		RUNTIME_CLASS(CMainFrame),	// рамка окна	
		RUNTIME_CLASS(CMyView));	// просмотр	
	AddDocTemplate(pDocTemplate);		// добавить шаблон
	CCommandLineInfo cmdInfo;		// Класс команд 
	ParseCommandLine(cmdInfo);		// разбор командной строки			
	if (!ProcessShellCommand(cmdInfo))	// запуск команд на выполнение
		return FALSE;                   
        m_pMainWnd->ShowWindow(SW_SHOW);		
	m_pMainWnd->UpdateWindow();				
	return TRUE;								
}

CStep2App::CStep2App()		
{
}

CStep2App theApp;

Описание

Идеалогия программирования в MFC заключается в концепции документ вид. Идея здесь в следующем. У вас есть класс отвечающий за состояние памяти, им пользуются классы отвечающие за отображение. Например у вас есть данные с координатами деталей, а вы хотите просматривать проекции. Можно создать несколько классов просмотров для проекций.

Для шаблона документа CSingleDocTemplate необходим идентификатор меню и указатели на три класса. Это шаблон для приложений SDI, т.е. с одним документом в окне.

Класс просмотра CView. Класс документа CDocument. Класс рамки окна CFrameWnd. Созданный шаблон добавляется функцией AddDocTemplate, а вообще шаблонов может быть несколько!!!.

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

Если что-то непонятно, это не страшно в следующих шагах положение изменится. Я считаю, что лучше раз испытать, чем слушать, и верояно на примерах понятнее.

Мы с Вами создали код очень близкий к коду AppWizard. И к нему мы будем приближаться.

Что будет происходить? При запуске будет сгенирирован шаблон на основе классов рамки,вида,документа. И при запуске процессор команд выполнит функцию Новый документ. После этого окно будет показано.


Шпаргалка

Создать классы документа , вида , рамки окна.
class CMyDoc : public CDocument	
.........
class CMyView : public CView
..........
class CMainFrame : public CFrameWnd	
...................
Создать и добавить шаблон документа
CSingleDocTemplate* pDocTemplate;		
	pDocTemplate = new CSingleDocTemplate(	
		IDR_MAINFRAME,						
		RUNTIME_CLASS(CMyDoc),				
		RUNTIME_CLASS(CMainFrame),			
		RUNTIME_CLASS(CMyView));			
	AddDocTemplate(pDocTemplate);		
Запустить интерпритатор команд для создания документа
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);					
if (!ProcessShellCommand(cmdInfo))
		return FALSE;
Не забыть про ресурсы
 IDR_MAINFRAME                   
 AFX_IDS_UNTITLED


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz