Wie ein MFC-modalen Dialog ändern, das Kind eines CView in einer MDI-Anwendung zu sein?

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

Frage

Ich habe eine MFC-Anwendung, die eine Doc / View / Rahmen Umsetzung ist. Ein Dialog läuft als modalen Dialog, das bei Bedarf erscheint (aus einer Menü-Option). Ich suche den modalen Dialog zu einer MDI-Kind Ansicht hinzuzufügen. Grundsätzlich mag ich die Vorlage aus der Ressource-Datei laden, und erstellen Sie es als Kind des CView in meinem neuen Trio (doc / view / Frame), dass ich auf die Vorlage Listen für die MDI bin hinzugefügt wird.

Ich habe ein paar Dinge ausprobiert in meiner abgeleiteten CMyView Klasse:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

Ich habe versucht, SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL) aufrufen. Ich habe versucht, die Ressource-Datei ändern, das Kind zu setzen und manuell steuern.

Jedes Mal ruft sie erstellen, die ListDialog des m_hWnd bleibt als 0. Dies sagt mir, es ist nicht richtig erstellt zu werden. Jeder Aufruf SetWindowPos () oder Showwindow () schlägt fehl, da die m_hWnd 0 (Debug-Assertion fehlschlägt).

Was muss ich tun, um einen modalen Dialog zu bekommen gebaut werden, erstellt und erscheinen als Kind CMyView in meinem MDI-Anwendung?

War es hilfreich?

Lösung

Ich weiß es nicht. Aber ...
Sie haben mehrere alternative Möglichkeiten, die geeignet sein könnten, je nachdem wie Ihre Anwendung sollte aussieht.

1 / mit CFormView. Wenn Ihr Blick auf den Dialog gewidmet ist, dann können Sie eine Ansicht aus der MFC-Klasse CFormView abzuleiten. Der Zweck dieser Ansicht ist ein Dialog angezeigt werden soll.

Juste erstellen Sie eine neue Anwendung mit dem Assistenten und ich denke, Sie sollten in der Lage sein, die CFormView-Klasse als Ansichtsklasse zu wählen, dann die erzeugte Datei in Ihre existaing Anwendung kopieren.

2 / a CSplitterWnd Verwendung. Eine Ansicht, die ein CFormView und das andere ihr aktuelles CView zu sein.

3 / mit CDialogBar Wenn Ihre Ansicht schon etwas anzeigt, können Sie Ihren Dialog als Werkzeugleiste mit der Klasse CDialogBar hinzufügen.

Andere Tipps

das funktioniert in meinem MDI App ...

void CGUIView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    p_Dlg = new CTestDlg;   // a CDialog derived class
    p_Dlg->Create(IDD_DIALOG1,this);
    p_Dlg->ShowWindow(SW_SHOW);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top