Filou Geschrieben 13. Mai 2005 Geschrieben 13. Mai 2005 Noch eine kurze Frage... Eben hat sich noch folgendes Problem aufgetan. Ich möchte einen mit CreateDialog ezeugtes Fenster wieder schließen. Ich denke mal, das geht mit DestroyWindow(); ABER: Laut MSDN muss ich das Handle des Fensters als Parameter übergen, dass geschlossen werden soll. Also DestroyWindow(wnd); Nur leider geht das nicht. Der Compiler sagt: AktivirenDlg.cpp D:\Eigene Dateien\Projekte\setup\AktivirenDlg.cpp(72) : error C2660: 'DestroyWindow' : Funktion akzeptiert keine 1 Parameter Fehler beim Ausführen von cl.exe. Browse-Informationsdatei wird erstellt... Setup.exe - 1 Fehler, 0 Warnung(en) Was mache ich falsch?
TinTin Geschrieben 13. Mai 2005 Geschrieben 13. Mai 2005 wenn ich das richtig sehe, rufst du das in einem dialog auf.(?) dann brauchst du kein handel. das fenster soll sich ja selber schliessen. ich kann mich aber auch irren... TinTin
Filou Geschrieben 13. Mai 2005 Autor Geschrieben 13. Mai 2005 also ich rufen von einem dialog ein anderen dialog auf, den ich mit CreateDialog erzeuge, damit er nicht modal ist. Jetzt möchte ich von dem untergeordneten dialog den eben erzeugten wieder schließen. Das ganze soll nämlich nur eine Benachrichtigung einblenden.
TinTin Geschrieben 13. Mai 2005 Geschrieben 13. Mai 2005 nur mal geraten ... probiers mal mit::DestroyWindow(wnd);
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 nur mal geraten ... probiers mal mit::DestroyWindow(wnd); Geht leider nicht. Passiert nix. Und keine Fehlermeldung...
Manfred.Becker Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Hi Filou, der Compiler hat recht! Verwende einfach die Klassenfunktion (ohne Parameter): m_MyDlg.DestroyWindow(); [/PHP]
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Keine Fehlermeldung, funktioniert nur leider auch nicht
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 der Compiler hat recht! Verwende einfach die Klassenfunktion (ohne Parameter): Wenn Filou CreateDialog benutzt, dann gibt es keine Klasse. Filou: Was gibt dir ::DestroyWindow zurück? Bist du sicher, dass das Fensterhandle richtig ist? Im Zweifelsfall kannst du es z.B. mit Spy++ prüfen.
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Wenn Filou CreateDialog benutzt, dann gibt es keine Klasse. Filou: Was gibt dir ::DestroyWindow zurück? Bist du sicher, dass das Fensterhandle richtig ist? Im Zweifelsfall kannst du es z.B. mit Spy++ prüfen. Welches Fensterhandle meinst Du? Wie gesagt, Laut MSDN muss ich das handle ja übergeben DestroyWindow(wnd); aber genau das geht ja nicht. Ich habe es so gemacht, dass dieses Fenster eingeblendet werden man auf den OK Button klickt. Dann soll es etwas ausrechnen und den Dialog wieder schließen.
Manfred.Becker Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 das ist aber merkwürdig, poste doch mal die Quellcode-Zeilen wie du den Dialog erzeugst, und wie du ihn wieder schliesst...
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 void CAktiverenDlg::OnOk() { CManualAktiverenDlg NextDlg; CKeyDlg WaitDlg; HINSTANCE hInst; HWND hWnd; //Schaltflächen deaktivieren m_key.EnableWindow(FALSE); m_ok.EnableWindow(FALSE); m_Cancel.EnableWindow(FALSE); //Bitte warten Dilaog einblenden hInst = GetModuleHandle(NULL); hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_INSTALLKEYGEN), *this, NULL); AnimateWindow(hWnd,1000, AW_BLEND); //Key berechnen Sleep(3000); //.... WaitDlg.DestroyWindow(); NextDlg.DoModal(); //Schaltflächen aktivieren m_key.EnableWindow(TRUE); m_ok.EnableWindow(TRUE); m_Cancel.EnableWindow(TRUE); //Prüfen ob installationskey gültig ist if (g_bActivate == TRUE) this->EndDialog(0); }
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 BOOL ret = ::DestroyWindow(hWnd); Cool, hat funktioniert!! Danke!!!!!! Aber wieso das jetzt geht hab ich nicht kapiert
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Cool, hat funktioniert!! Danke!!!!!! Das hat TinTin aber schon ein paar Beiträge vorher geschrieben Aber wieso das jetzt geht hab ich nicht kapiertWieso sollte das nicht gehen? Falls du dich über die :: wunderst: Dein Code steht in einer Memberfunktion einer Klasse, die eine Methode DestroyWindow hat. Es gibt auch eine globale Funktion DestroyWindow, aber innerhalb einer Memberfunktion werden immer zuerst die Methoden nach dem Namen durchsucht, auch wenn dann keine Funktion gefunden wird, deren Signatur passt (hier: CWnd:: DestroyWindow(), ohne Parameter). Wenn du die globale Funktion aufrufen willst, musst du das mit dem Namensraumoperator :: machen.
Filou Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Das hat TinTin aber schon ein paar Beiträge vorher geschrieben Wieso sollte das nicht gehen? Falls du dich über die :: wunderst: Dein Code steht in einer Memberfunktion einer Klasse, die eine Methode DestroyWindow hat. Es gibt auch eine globale Funktion DestroyWindow, aber innerhalb einer Memberfunktion werden immer zuerst die Methoden nach dem Namen durchsucht, auch wenn dann keine Funktion gefunden wird, deren Signatur passt (hier: CWnd:: DestroyWindow(), ohne Parameter). Wenn du die globale Funktion aufrufen willst, musst du das mit dem Namensraumoperator :: machen. Ach, jetzt verstehe ich. Aber es ging halt erst mit dem BOOL ret =
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Aber es ging halt erst mit dem BOOL ret = Daran kann es nicht liegen
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden