Dialog im Konstruktor beenden
-
Ich mache folgendes
CDlgCamera::CDlgCamera(CWnd* pParent /*=NULL*/) : CDialog(CDlgCamera::IDD, pParent) { m_camera.Initialize(); //loads Camera dll and does initialisation m_HandleCamera = m_camera.CxOpenDevice(0); // open camera and save device if (m_HandleCamera == INVALID_HANDLE_VALUE) { m_camera.CxCloseDevice(m_HandleCamera); m_camera.Shutdown(); //unload DLL OnOK(); } ... }um den Dialog im Konstruktor zu beenden falls notwendig.
Dann allerdings stürzt das Programm in OnOK ab.
Wie müsste ich den Dialog alternativ beenden?Matthias
-
Also, mir fallen zwei Sachen ein:
1. eine bool-Variable, die du im Konstruktor setzt und in OnInitDialog prüfst (da funktioniert OnOK nämlich).
2. Du nutzt statt des Konstruktors eine Init-Funktion, die kann dir nämlich einen Rückgabewert geben und du musst gar nicht erst DoModal aufrufen.
2 einhalb: Du gibst dem Konstruktor eine bool&, die du dann auswertest.
-
3. Schreib Deine Beenden-Routinen in eine Extra Funktion und ruf diese statt OnOk() auf.
-
connan schrieb:
3. Schreib Deine Beenden-Routinen in eine Extra Funktion und ruf diese statt OnOk() auf.
Mit welchem Aufruf beende ich denn einen Dialog?
Matthias
-
z.B. mit:
EndDialog(IDOK);Wobei IDOK hier für das von dir gewünschte Ergebnis steht, dass von DoModal() zurückgegeben wird.
-
Das brauchst Du gar nicht. Wenn der CTor ausgeführt wird existiert ja der Dialog noch gar nicht. Deshalb schlägt ja auch der direkte Aufruf von OnOk() fehl.
Edit: mit 'Beenden-Routinen' sind jene gemeint, die derzeit in der OnOk() stehen (so Du dort welche hast).