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?


Anmelden zum Antworten