Hauptrahmenfenster ändern

Dojo

Grünschnabel
Hallo,

ich habe ein vorgefertigtes Visual-C++ Programm bei dem ein Livestream im Hauptrahmenfenster (MainFrm) erscheint. Ich möchte allerdings einige Optionen zur Einstellung, einen Rahmen um den Livestream usw. hinzufügen.
1.) Ist es überhaupt nötig das Hauptrahmenfenster zu verwenden oder kann man auch den Livestream, die Einstellungen usw. in einem Dialogfenster zeigen, völlig ohne Hauptrahmenfenster?
2.) Wie bekomme ich ein Textfeld, OK-Button usw. in das Rahmenfenster (ohne ein neues Dialogfenster aufzurufen.

Ich Danke Euch für Eure Antworten
Dom
 
Hallo,

1.) Man kann auch dialogbasierte Anwendungen erstellen. Allerdings würde das bedeuten, das vorhandene Programm ziemlich radikal umzubauen.

2.) Das Hauptrahmenfenster beinhaltet in jedem Fall auch einen View, in dem wohl aktuell nur der Livstream angezeigt wird. Diesen View könnte man durch einen FormView ersetzen, der seinerseits Controls enthalten kann (läßt sich praktisch wie ein Dialog verwenden).

Gruß
MCoder
 
2.) Das Hauptrahmenfenster beinhaltet in jedem Fall auch einen View, in dem wohl aktuell nur der Livstream angezeigt wird. Diesen View könnte man durch einen FormView ersetzen, der seinerseits Controls enthalten kann (läßt sich praktisch wie ein Dialog verwenden).

Hallo,
vielen Dank Mcoder für die schnelle Antwort. Hast Du ein Beispiel in VC++ 6 dazu? Habe nichts nichts ergooglen können. –Bin VC++ Anfänger
Danke
Dom
 
Hallo,

du legst eine Dialogresource ohne Titel, ohne Rand und mit dem Typ "untergeordnet" an. Dazu erzeugst du mit dem Klassenassistenten eine neue Klasse, basierend auf "CFormView".
In "OnCreate" vom MainFrame kannst du dann folgenden Code zum Einbinden des Formviews verwenden:
C++:
CRuntimeClass *pViewClass = RUNTIME_CLASS(CMyFormView); // Klassenname des Formviews

CCreateContext context;
context.m_pNewViewClass     = pViewClass;
context.m_pCurrentDoc       = NULL;
context.m_pNewDocTemplate   = NULL;
context.m_pLastView         = NULL;
context.m_pCurrentFrame     = this;

CView* pView = (CView *)pViewClass->CreateObject();

if( pView )
{
    CRect rc;
    GetClientRect(&rc);

    if( pView->Create(  NULL,
                        NULL,
                        AFX_WS_DEFAULT_VIEW,
                        CRect(0,0,0,0),
                        this,
                        AFX_IDW_PANE_FIRST,
                        &context) )
    {
        pView->OnInitialUpdate();
        SetActiveView(pView);
        RecalcLayout();
    }
}
Gruß
MCoder
 
Hallo,
vielen Dank für den Vorschlag. Habe eine neue Dialogresource sowie eine neue Klasse wie beschrieben angelegt. Allerdings existiert in weder in MainFrame noch einer anderen Datei/Klasse „OnCreate“
Danke
Dom
 
Allerdings existiert in weder in MainFrame noch einer anderen Datei/Klasse „OnCreate“
Verwundert mich eigentlich, weil diese Methode immer automatisch vom Projektassistenten angelegt wird. Schaue doch mal, an welcher Stelle der vorhandene View angelegt bzw. initialisiert wird.

Gruß
MCoder
 
Hallo Mcoder, Hallo alle Anderen,

Was meinst Du mit: „Schaue doch mal, an welcher Stelle der vorhandene View angelegt bzw. initialisiert wird.“ –Ich finde keine View.
Evtl. muß ich hier etwas ändern (aus MainFrm.cpp):

BOOL CMainFrame::preCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::preCreateWindow(cs) )
return FALSE;
// ZU ERLEDIGEN: Ändern Sie hier die Fensterklasse oder das Erscheinungsbild, indem Sie
// CREATESTRUCT cs modifizieren.

return TRUE;
}

Danke
Dom
 
Wie und wo wird denn dann eigentlich der Livestream angezeigt? Der fehlende OnCreate-Member würde sich recht problemlos ergänzen lassen, allerdings solltest du erst schauen, wie denn der aktuelle Ist-Zustand technisch gelöst wurde.

Gruß
MCoder
 
Zurück