::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 inBOOL 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