Knowledge Base Nr: 00296 mfcapp.cpp - http://www.swe-kaiser.de

MFC: VS2005 MDI Applikation Grundgerüst (DIN A4, Scrollen, versch. Doc/Views) erstellen

  
- Projekt MDI Applikation erzeugen (View von CScrollView ableiten!)
- xxxDoc und xxxView.h und *.cpp files duplizieren
- in kopie von xxxDoc und xxxView Dateien mit SUchen und ersetzen Klassennamen austauschen
- in rc-editor menus duplizieren
- evtl. menuepunkt Fenster|Nebeneinander ID von ID_WINDOW_TILE_HORIZ in ID_WINDOW_TILE_VERT ändern
- in BOOL CtestApp::InitInstance():
- duplizieren AddDocTemplate:

CMultiDocTemplate* pDocTemplateLulli;
pDocTemplateLulli = new CMultiDocTemplate(IDR_lulliTYPE,
RUNTIME_CLASS(ClulliDoc),
RUNTIME_CLASS(CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
RUNTIME_CLASS(ClulliView));
if (!pDocTemplateLulli)
return FALSE;
AddDocTemplate(pDocTemplateLulli);

- keine leere datei öffnen/neu anlegen: nach ParseCommandLine(cmdInfo); einfügen:
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

- in stringtable IDR_xxxTYPE duplizieren und anpassen

- neue menueinträge für versch. dokumente erzeugen und verknüpfen:
void CtestApp::OnDateiNeululli()
{
OpenNewDocument("lulli");
}

void CtestApp::OnFileNewtest()
{
OpenNewDocument("test");
}

- funktion einfügen:
BOOL CtestApp::OpenNewDocument(const char* lpszTarget)
{
CDocTemplate* pSelectedTemplate;
POSITION pos = GetFirstDocTemplatePosition();
while (pos != NULL)
{
pSelectedTemplate = (CDocTemplate*)GetNextDocTemplate(pos);
CString strDocName;
pSelectedTemplate->GetDocString(strDocName, CDocTemplate::docName);
if (strDocName == lpszTarget)
{
pSelectedTemplate->OpenDocumentFile(NULL);
return TRUE;
}
}

return FALSE;
}

- blattgröße/mapping-mode/scrollsettings vorgeben in OnInitialUpdate
void CtestView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

CSize sizeTotal;

// TODO: Gesamte Größe dieser Ansicht berechnen
sizeTotal.cx = 2100;
sizeTotal.cy = 2950;
SetScrollSizes(MM_LOMETRIC, sizeTotal);
}

- zeichnen in OnDraw
void CtestView::OnDraw(CDC* pDC)
{
CtestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

CString str;

for (int i=0; i<30; i++)
{
int x = i*50;
int y = -2950 + i*50;
str.Format(CString("%d/%d test test"), x, y);
pDC->TextOut(x, y,str, str.GetLength());

pDC->MoveTo(0, 0);
pDC->LineTo(x, 0);
pDC->LineTo(x, y);
pDC->LineTo(0, y);
pDC->LineTo(0, 0);

CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
CPen* pOldPen = pDC->SelectObject(&pen);
pDC->MoveTo(x-25, y-25);
pDC->LineTo(x+25, y+25);
pDC->MoveTo(x-25, y+25);
pDC->LineTo(x+25, y-25);
pDC->SelectObject(pOldPen);
}
}