In welche Methode packe ich am besten die Initialiserung rein?
-
Ich beziehe mich auf das Posting hier.
Basis ist immer noch eine SDI-Anwendung mit Doc/View-Trennung. Die gesamte Initialisierung und auch das Freigeben der Messkarte habe ich (wie da empfohlen) in Methoden des Docs gepackt. Wenn jetzt der Benutzer unter Datei->Neu ein neues Projekt anlegt, dann möchte ich auch die Karte reinitialisieren. Dabei wird ja die DeleteContents() und dann die OnNewDocument() aufgerufen, da bei SDI das Doc ja nicht neu angelegt, sondern nur gelöscht wird. Dort könnte man ja die Initialisierungsroutine reinpacken. Allerdings möchte ich beim Programmstart die Initialisierung erst ausführen, wenn das Hauptfenster der Anwenung zu sehen ist (ist eine Vorgabe die ich einhalten muss). Hierfür wäre meiner Meinung nach die InitInstance() die richtige Methode. Allerdings werden die oben genannten Methoden das erste Mal vor dem Aufruf m_pMainWnd->ShowWindow() aufgerufen, also wenn noch kein Hauptfenster existiert. Wie kann ich das realisieren? Gibt es eine Methode, in der der Initialisierungscode besser aufgehoben wäre?
-
Ich glaube, das beste wärs, im InitInstance
SetTimer(9876,500);
einbauen.
Ausserdem eine Funktion in der gleichen Klasse:
void klasse::OnTimer(UINT nummer)
{
if(nummer==9876){/*Jetzt laden*/}
}Damit wird nach einer halben sekunde (500 millisek)
geladen, in dieser zeit wird das fenster schon aufgebaut sein.
-
Diesen Vorschlag finde ich persönlich nicht gut. Außerdem, woher will man wissen ob das Fenster nach einer halben Sekunde da ist? Es gibt Rechner die laufen sehr langsam und da kann es schon mal länger dauern. Man sieht dann das der Programmthread im Taskmanager schon angelegt ist, die Anwendung aber noch kein Hauptfenster hat.