Hallo liebes Forum,
ich habe mehrere Probleme unter Windows. Ich programmiere mit Visual C++ 6.0 und habe relativ wenig Erfahrungen mit MDI-Applikationen.
Ich benutze die ResizableLib 1.4alpha, um die Client-Fenster größer und kleiner ziehen zu können. Insgesamt gibt es in meiner Applikation bisher 2 FormViews.
Diese kann ich im Rahmenfenster (CMainFrame) aktivieren und maximieren. Dies würde ich jedoch gern als Voreinstellung programmseitig machen. Es gelingt mir einfach nicht.
Kann mir jemand helfen?
Hier ist ein stück meines codes:
Zum öffnen bzw. schliesen der FormViews benutze ich folgende Funktionen,
die in CMainFrame deklariert sind:
zum schliesen:
Wie man vielleicht sieht möchte ich beim ersten Menüclick das Fenster (FormView)
öffen, und beim zweiten mal nur aktivieren, wenn es nicht durch cancel geschlossen wurde.
Sofwohl das maximieren der FormViews, als auch das aktivieren gelingt nicht.
Ich bin über jede Hilfe dankbar.
Viele Grüße
hphi
ich habe mehrere Probleme unter Windows. Ich programmiere mit Visual C++ 6.0 und habe relativ wenig Erfahrungen mit MDI-Applikationen.
Ich benutze die ResizableLib 1.4alpha, um die Client-Fenster größer und kleiner ziehen zu können. Insgesamt gibt es in meiner Applikation bisher 2 FormViews.
Diese kann ich im Rahmenfenster (CMainFrame) aktivieren und maximieren. Dies würde ich jedoch gern als Voreinstellung programmseitig machen. Es gelingt mir einfach nicht.
Kann mir jemand helfen?
Hier ist ein stück meines codes:
Code:
BOOL CBpApp::InitInstance()
{
AfxEnableControlContainer();
// Standardinitialisierung
#ifdef _AFXDLL
Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen
#else
Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen
#endif
// Ändern des Registrierungsschlüssels, unter dem unsere Einstellungen gespeichert sind.
SetRegistryKey(_T("bp"));
LoadStdProfileSettings(); // Standard INI-Dateioptionen laden (einschließlich MRU)
// Dokumentvorlagen registrieren
m_pDocTemplateSoundPlay = new CMultiDocTemplate(IDR_BPTYPE,
RUNTIME_CLASS(CBpDocSoundPlay),
RUNTIME_CLASS(CResizableMDIChild),
RUNTIME_CLASS(CBpViewSoundPlay));
m_pDocTemplateSoundRec = new CMultiDocTemplate(IDR_BPTYPE,
RUNTIME_CLASS(CBpDocSoundRec),
RUNTIME_CLASS(CResizableMDIChild),
RUNTIME_CLASS(CBpViewSoundRec));
AddDocTemplate(m_pDocTemplateSoundPlay);
AddDocTemplate(m_pDocTemplateSoundRec);
// Haupt-MDI-Rahmenfenster erzeugen
m_pMainFrame = new CMainFrame;
if ( ! m_pMainFrame->LoadFrame(IDR_BPTYPE))
return FALSE;
m_pMainWnd = m_pMainFrame;
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Verteilung der in der Befehlszeile angegebenen Befehle
/*
if (!ProcessShellCommand(cmdInfo))
return FALSE;
*/
m_pMainFrame->ShowWindow(m_nCmdShow);
m_pMainFrame->UpdateWindow();
CString csTitle;
csTitle.LoadString(AFX_IDS_APP_TITLE);
m_pMainFrame->SetWindowText(csTitle);
HICON hIcon = AfxGetApp()->LoadIcon(IDI_MRK);
if ( hIcon )
m_pMainFrame->SetIcon(hIcon, FALSE);
return TRUE;
}
Zum öffnen bzw. schliesen der FormViews benutze ich folgende Funktionen,
die in CMainFrame deklariert sind:
Code:
void CMainFrame::activateDocument(CMultiDocTemplate* m,
CRuntimeClass* c1,
CRuntimeClass* c2)
{
bool bFound = false;
if ( m )
{
POSITION p = m->GetFirstDocPosition();
if ( p )
{
CDocument* d = m->GetNextDoc(p);
if ( d )
{
if ( d->IsKindOf(c2) )
{
POSITION p = d->GetFirstViewPosition();
while ( p && ! bFound )
{
CView* v = d->GetNextView(p);
//d->UpdateAllViews(v); // geht nicht
if ( v->IsKindOf(c1) )
{
//v->BringWindowToTop(); // geht nicht
//v->SetForegroundWindow(); // geht nicht
//v->SetActiveWindow(); // geht nicht
//v->FlashWindow(TRUE); // geht nicht
//::SetFocus(v->m_hWnd); // geht nicht
//SetActiveView(v); // geht nicht
bFound = true;
break;
}
}
}
}
}
}
if ( ! bFound )
{
CDocument* d = m->CreateNewDocument();
if( d )
{
CFrameWnd* f = m->CreateNewFrame(d, this);
if( f )
{
f->InitialUpdateFrame(d, TRUE);
POSITION p = d->GetFirstViewPosition();
if ( p )
{
CResizableFormView* v = (CResizableFormView*)d->GetNextView(p);
v->ResizeParentToFit(FALSE);
v->ShowWindow(SW_SHOWMAXIMIZED);
}
}
}
}
}
zum schliesen:
Code:
void CMainFrame::closeDocument(CRuntimeClass* c)
{
POSITION p = AfxGetApp()->GetFirstDocTemplatePosition();
while ( p )
{
CDocTemplate* t = AfxGetApp()->GetNextDocTemplate(p);
if ( t )
{
POSITION p2 = t->GetFirstDocPosition();
if ( p2 )
{
CDocument* d = t->GetNextDoc(p2);
if ( d )
{
if ( d->IsKindOf(c) )
{
d->OnCloseDocument();
break;
}
}
}
}
}
CString csTitle;
GetWindowText(csTitle);
if ( csTitle.IsEmpty() )
{
csTitle.LoadString(AFX_IDS_APP_TITLE);
SetWindowText(csTitle);
}
}
Wie man vielleicht sieht möchte ich beim ersten Menüclick das Fenster (FormView)
öffen, und beim zweiten mal nur aktivieren, wenn es nicht durch cancel geschlossen wurde.
Sofwohl das maximieren der FormViews, als auch das aktivieren gelingt nicht.
Ich bin über jede Hilfe dankbar.

Viele Grüße
hphi