::ExitInstance() und ::OnDestroy() werden nicht aufgerufen!



  • Hallo,

    ich habe eine Dialog Anwendung erstellt und möchte wenn diese gechlossen wird, dann Aufräumarbeiten durchführen. Die Anwendungsklasse heißt CLauncherApp.

    In der Datei "Launcher.cpp"

    BOOL CLauncherApp::InitInstance()
    ...
    	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
    
    	AfxEnableControlContainer();
    
        CString msg;
    
    	DWORD dwError;
    
        CLauncherApp::m_LauncherAppname = "Footman Launcher";
    	CLauncherApp::m_hMutex = CreateMutex(NULL, true, _T(CLauncherApp::m_LauncherAppname));
    
    	dwError = GetLastError();
    
    	if (dwError == ERROR_ALREADY_EXISTS){
    
    	  HWND hLauncherWnd = ::FindWindow(_T("#32770"),_T(CLauncherApp::m_LauncherAppname));
    
    	  if (hLauncherWnd != NULL){ 
            ::SetForegroundWindow(hLauncherWnd);
            return FALSE;
    
    	  } 		
    
    	}
    
    ...
    	return FALSE;
    }
    

    und dann in der gleichen Datei

    int CLauncherApp::ExitInstance()
    {
    
    		AfxMessageBox(_T("ExitInstance"));
    
    	// ZU ERLEDIGEN: Hier Code zur Destruktion einfügen
    	if (	CLauncherApp::m_hMutex ){
    
    		 ReleaseMutex( CLauncherApp::m_hMutex );
    		 CloseHandle( CLauncherApp::m_hMutex );
    		 CLauncherApp::m_hMutex = NULL;
    
    	}
    
    	CWinApp::ExitInstance();
    
    	return 0;
    }
    

    in der Datei Launcher.h

    class CLauncherApp : public CWinApp
    {
    public:
    	CLauncherApp();
    ...
    
            public:
    	virtual BOOL InitInstance();
    	virtual int ExitInstance();
    ...
    
    DECLARE_MESSAGE_MAP()
    
    	public:
    	char* m_LauncherAppname;
    	HANDLE m_hMutex;
    ...
    };
    

    in der Datei LaucherDlg.cpp

    void CLauncherDlg::OnDestroy() 
    {
    	CDialog::OnDestroy();
    
    	// Delete the system tray icon.
    	//Shell_NotifyIcon(NIM_DELETE, &m_nid);
    
    	AfxMessageBox(_T("Destory!"));
    }
    

    aber OnDestroy oder Exitinstance wird nicht aufgerufen, was mache ich falsch?

    Gruß
    Franky



  • Hi,

    kann es sein, daß es weil eine Dialoganwendung eben die Initialisierung
    eben in

    BOOL CLauncherApp::InitInstance()
    ...
    

    bis zur

    CLauncherDlg dlg;
    	m_pMainWnd = &dlg;
    	int nResponse = dlg.DoModal();
    

    und danach (eben auch in der InitInstance, dann die Aufräumarbeiten durchgeführt werden...?

    if (nResponse == IDOK)
    	{
    		// ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
    		//  Dialogfelds über OK zu steuern
    		AfxMessageBox(_T("Goodbye!"));
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    		AfxMessageBox(_T("Cancel"));
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    
       // AfxDaoTerm();
    
    	return FALSE;
    }
    

    also im Code oben?

    Gruß
    Franky


Anmelden zum Antworten