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).


Anmelden zum Antworten