Einbinden von Dialog in CFormView

Hi. Ja Fenster ist mit einem Splitter geteilt...
(Häckchen Explorer-Stil beim erzeugen vom Projekt an...)

Ich versuchs mit SetWindowPos() :)
 
Aha, dann musst du statt dem GetDlgItem von dem Splitter die richtige Pane holen (GetPane). Diese Pane kannst du dann als Parent einsetzen (statt dem View selbst).
 
Mit GetPane() fliegt er weg... irgendwas mach ich noch falsch...
Hättest du vielleicht ein codeschnipsel wo ein bsp. mit GetPane() drin ist?
 
Das ist von einem Programm von mir, innerhalb von OnCreateClient, direkt nach dem Erstellen des Splitters:

CGUIEditorView* pView = (CGUIEditorView*)m_wndSplitter.GetPane( 0, 1 );

Das holt das CWnd von dem rechten Pane und castet gleich unverschämt auf meinen View-Typ.

Wenn du die Pane direkt benutzt, kannst du dir das SetWindowPos auch sparen, der Dialog ist dann ja schon richtig drin. Das Pane als Parent einsetzen, dein Dialog mit Create erzeugen und fettich.
 
OK. In der CMainFrame klappt das alles...

aber was wenn ich das ausserhalb der Klasse machen will?

Auf m_wndSplitter habe ich nur innerhalb der CMainFrame Zugriff...
CLeftView ist meine TreeView-Klasse. In der möchte ich nach einem Klick auf das TreeView den Dialog wechseln....
In der Funktion CLeftView::OnSelchanged(...)

Die Klassen:

class CVerleihlisteView : public CListView
class CMainFrame : public CFrameWnd
class CLeftView : public CTreeView
class CGamesDialog : public CDialog
 
Wieder zuviel OOP-Fuzzies hier: Wenn du keinen Zugriff drauf hast, ist es protected oder private.
Mach es entweder public, oder bau eine Memberfunktion (public), die das Ganze dann macht.

Macht euch doch nicht unnötig das Leben schwer, Leute.
Sorry, aber das musste mal raus :)
 
public wollte ich es nicht machen .. da ich nicht in Automatisch generierten Code rumfummeln wollte...

Wenn ich es mit einer Member von CMainframe mache und diese dann irgendow in CLeftView
aufrufe = Absturz....
 
Code:
//Im TreeMenü wurde etwas verändert...
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
    ...
    m_pMainFrame->ChangeDialog();
    ...
}

void CMainFrame::ChangeDialog() 
{
 
 //Bsp...
 //CGUIEditorView* pView = (CGUIEditorView*)m_wndSplitter.GetPane( 0, 1 );
  
CVerleihlisteView* pView = (CVerleihlisteView*)m_wndSplitter.GetPane( 0, 1 );

  m_pGamesDlg->Create(IDD_GAMES,pView);
  m_pGamesDlg->SetWindowPos(&CWnd::wndTop,0,0,1600,1280,NULL);
  m_pGamesDlg->ShowWindow(SW_SHOW);
  m_pGamesDlg->SetWindowPos(this, 400,600,500,400,SWP_DRAWFRAME);
  //m_pGamesDlg->DestroyWindow();
    
}
 
Wo genau stürzt es denn ab?

Ist m_pMainFrame gültig?
Ist m_pGamesDlg vorher einmal ge-new-et worden?
Sowas wie m_pGamesDlg = new CGamesDialog();
 

Neue Beiträge

Zurück