OnNewDocument
-
Wenn ich das so schreibe...:
BOOL CTEST_SIMDoc::OnNewDocument() { auswahlDlg.DoModal(); if (!CDocument::OnNewDocument()) return FALSE; return TRUE; }
...wird mein Dialog schon beim Starten des Programms das erste mal aufgerufen!
Wie kann ich das verhindern! So das mein Dialog erst kommt wenn ich wirklich auf "New" klicke!?
-
BOOL CTEST_SIMDoc::OnNewDocument()
{
static bool auswahl = 0;if(auswahl)
{
auswahlDlg.DoModal();
auswahl = 1;
}if (!CDocument::OnNewDocument())
return FALSE;return TRUE;
}
-
BOOL CTEST_SIMDoc::OnNewDocument() { static bool auswahl = 0; if(auswahl) { auswahlDlg.DoModal(); auswahl = 1; } if (!CDocument::OnNewDocument()) return FALSE; return TRUE;
}
-
Soweit ich weiß liegt das daran, dass OnNewDocument nach OnCreate aufgerufen wird. Somit kommt Dein Dialog immer. Aber:
BOOL CTEST_SIMDoc::OnNewDocument() { static bool auswahl = 0; if(auswahl) { auswahlDlg.DoModal(); auswahl = 1; } if (!CDocument::OnNewDocument()) return FALSE; return TRUE; }
dürfte gar nicht funktionieren, da auswahl nie vor dem if true werden kann. Auswahl müsste global definiert werden und dann irgendwo nach der ganzen Initialisierung true gesetzt werden.
-
In der Art habe ich das mal gemacht:
BOOL CWalzeDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // ZU ERLEDIGEN: Hier Code zur Reinitialisierung einfügen // (SDI-Dokumente verwenden dieses Dokument) // neues Dokument erzeugen // Allgemeine Daten vorbelegen if(m_WalzenLaenge == 0.0){ m_WalzenTyp = SPIRALWALZE; m_WalzenLaenge = 600.0; m_WalzenDurchmesser = 125.0; } else{ // Dialog zur Eingabe der allgemeinen Walzendaten aufrufen CAllgemeinDlg Dia; Dia.m_WalzenTyp = m_WalzenTyp; Dia.m_WalzenLaenge = m_WalzenLaenge; Dia.m_WalzenDurchmesser = m_WalzenDurchmesser; Dia.DoModal(); SetModifiedFlag(); m_WalzenTyp = Dia.m_WalzenTyp; m_WalzenLaenge = Dia.m_WalzenLaenge; m_WalzenDurchmesser = Dia.m_WalzenDurchmesser; } ...
m_WalzenLaenge wird im Konstruktor der Doc-Klasse auf 0.0 gesetzt.
Beim Ersten Aufruf (beim Programmstart) werden somit die Default-Werte verwendet, bei einem weiteren Aufruf (z.B. per Menü / Toolbar) wird dann der Dialog angezeigt.So ähnlich, eventuell mit einer BOOL-Member Variable (m_ErsterAufruf) müsste das gehen...
-
BOOL CTEST_SIMDoc::OnNewDocument() { static bool auswahl = 0; if(auswahl) { auswahlDlg.DoModal(); } auswahl = 1; if (!CDocument::OnNewDocument()) return FALSE; return TRUE; }
-
heimwerker schrieb:
BOOL CTEST_SIMDoc::OnNewDocument() { static bool auswahl = 0; if(auswahl) { auswahlDlg.DoModal(); } auswahl = 1; if (!CDocument::OnNewDocument()) return FALSE; return TRUE; }
Der sieht aber auch ein klein wenig anders aus wie der da:
BOOL CTEST_SIMDoc::OnNewDocument() { static bool auswahl = 0; if(auswahl) { auswahlDlg.DoModal(); auswahl = 1; } if (!CDocument::OnNewDocument()) return FALSE; return TRUE; }
Ist gut möglich das es so auch funktioniert.