MFC-DLL: Schließen funktioniert nicht
-
Hiho,
ich habe mir eine Test-Dll erstellt, mit der ich etwas experimentieren möchte.
Nun ist mir aufgefallen, dass in dieser DLL das Kreuz oben in der Ecke
(zum Schließen des Dialoges) nicht funktioniert.Es ist zwar aktiv, aber bei einem Klick darauf passiert nicht.
In einer zweiten DLL, die keinen Schnickschnack wie "Automatisierung" etc.
nutzt, geht das mit dem Schließen über das "X" jedoch.Nun bin ich am rätseln wo ich den Aufruf für das Schließen setzen muss.
Dachte erst evtl. so im Dialogfenster meiner DLL:
CMenu* HandleToSystemMenu = this->GetSystemMenu(FALSE); HandleToSystemMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_ENABLED);Keine Änderung, es will den Dialog nicht schließen

-
Ich habe es nun soweit eingrenzen können, dass ich sagen kann, dass es offenbar
an der Option "Automatisierung" liegt. Wie kann ich meiner DLL denn nachträglich diese "Automatisierung" wieder entziehen, damit das "X" wieder geht?Ich bräuchte da wirklich mal eure Hilfe.
-
DLL? Eine DLL alleine kann nicht ausgeführt werden.
Was ist das für ein Konstrukt, den Du da gebaut hast?Hast Du OnClose überschrieben?`
Hast Du einen WM_SYSCOMMAND Handler eingebaut?
-
Hallo Martin (juhu ein Lichtblick!),
ich habe OnClose nicht überschrieben.
Die DLL wird von meinem Hauptprogramm geladen (klappt soweit auch).
WM_SYSCOMMAND habe ich auch nirgends verwendet.Meine DLL's laufen alle richtig, bis auf diese eine mit der Option
"Automatisierung". Da geht einfach das "X" oben rechts in der Ecke nicht.Lösche ich die ganzen Automatisierungsfunktionen wie UnLoadDll etc.
bleibt nur noch ein Fehler den ich nicht weg bekomme (evtl geht es danach
ja wieder alles?)error RC2135 : file not found: testdll.tlb
-
So, hab die Automatisierung drin gelassen und einfach mal OnClose
überschrieben, da es von selbst (warum auch immer????) nicht wollte.
Ich bin zwar in der Funktion angekommen, der Dialog wurde aber nicht geschlossen.Ich musste CDialog::OnClose mit CDialog::OnCancel ersetzen, damit ich den
Dialog wieder schließen kann.void testdll::OnClose() { //MessageBox("angekommen"); CDialog::OnCancel(); }Das ist zwar irgendwie doof und ich verstehe auch nicht warum das so ist,
aber immerhin läuft es jetzt...