CWnd::Print geht einmal, einmal nicht, warum?
-
Hi
Ich hab wiedereinmal ein stinknormales Dialogfeld mit einem Button und einem Rahmen (Membervariable: CStatic m_ctlDC).
Wenn man auf den Button klickt, "rendert" sich das Dialogfeld in sich selber (über Print [bzw. WM_PRINT]).
Wenn man auf den Button klickt, wird folgende Funktion aufgerufen:CDC* dc = m_ctlDC.GetDC(); pWnd->Print(dc, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED); m_ctlDC.ReleaseDC(dc);Jetzt hab ich noch ein "Programm erstellt": und zwar nur das vom Klassenassi vorgefertigte Dialogprogramm(mir titel "test") ohne änderungen kompiliert.
Jetzt hab ich die obrige Funktion folgenderweise abgeändert:CWnd* pWnd = CWnd::FindWindow(NULL,"test"); if(!pWnd) { MessageBox("Fenster nicht gefunden"); return; } CDC* dc = m_ctlDC.GetDC(); pWnd->Print(dc, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED); m_ctlDC.ReleaseDC(dc);Man sollte jetzt ja annehmen (und es ist so, wie der 1. Schritt bewiesen hat), dass die Klasse CDialog die WM_PRINT Nachricht implementiert hat.
Doch der Dialog wird nicht gerendert????Wo liegt hier der Fehler, komm einfach nicht dahinter.
Grüße twinlight
-
Aja, hab vergessen zu sagen, dass der 1. Code
CDC* dc = m_ctlDC.GetDC(); pWnd->Print(dc, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED); m_ctlDC.ReleaseDC(dc);perfekt funktioniert, nur eben nicht, wenn ich statt this einen zeiger auf ein anderes "MFC-Dialogfenster" hab
-
Hi
ich beim surfen auf den Hinweis gestoßen, dass das Fenster, dass die WM_PRINT Nachricht empfängt im gleichen Prozess laufen muss, damit das DC gültig bleibt...Dies verstehe ich ehrlich gesagt überhaupt nicht, könnt ihr mir helfen?
Grüße twin
-
und nochmal

ich bin bei meiner Recherche auf die Aussage gestoßen, dass man die WM_PRINT Nachricht nur in eigenen Fenstern verwenden kann (aus eben dem vorher gesagten Grund)Kann mir das jemand bestätigen / wiederlegen ?
Grüße twinlight
-
und wieder nochmal

Kann ich vielleicht eine funktion in den Prozess des anderen Windows "reinschmuggeln" oder "renstecken" - k.A. wie man das nennen soll
?
So wär dieses Problem umgangen?