Hochformat im Druckdialog deaktivieren?



  • Hallo Leut'

    Ich kenne zwar den Zeiger m_pPD mit den man Zugriff auf den standard PrintDialog hat, habe aber bis jetzt noch nicht den Member, Funktion, Datenfeld gefunden wo ich den Hochformat deaktivieren kann.

    Ich will nämlich grundsätzlich nur im Querformat drucken.

    Weiß vielleicht jemand auf die schnelle die Lösung ???

    DANKE euch BOLI



  • Ich habe das wie folgt gelöst (Blumen muss ich aber an den Codeguru weitergeben):

    CPrintDialog dlg(false); 
    
    if (dlg.DoModal() != IDOK) return;
    
    DEVMODE *myMode = dlg.GetDevMode(); // myMode mit Printer defaults
    myMode->dmOrientation = DMORIENT_LANDSCAPE; // defaultmässig Querformat
    
    // setup the printing DC*/
    CDC dcPrint;
    
    dcPrint.Attach(dlg.GetPrinterDC()); // get printer dc
    dcPrint.ResetDC(myMode); // resets dc to new DEVMODE
    


  • Danke, danke Plotter !

    Leider fehlen mir aber einige kleine Infos noch.
    Ich habe eine SDI Anwendung, und ich weiß nicht wie ich da an die vom MFC vorgegebene Print Dialog herankomme.

    Wo soll ich also den Code einfügen???

    viele Grüße bolilein 😕

    [ Dieser Beitrag wurde am 25.06.2003 um 15:59 Uhr von bolilein editiert. ]



  • Sooo, mal wieder zum Glück auch mal selber die Lösung gefunden!

    Stell` ich mal rein, vielleicht freut sich jemand darauf 😉

    Also der Artikel heißt:
    "How to Change Default Printer Settings in an MFC Application"
    und befindet sich in der msdn Libary.

    In Kürze die Lösung:

    Includiert die Datei "winspool.h" in der Implementierung von der Klasse, der bei euch von CWinApp abgeleitet wurde.

    Implementiert die folgende Funktion:
    Bei euch heißt die Funktion wahrscheinlich anders! CIrgendeinWinApp

    void CMyWinApp::SetLandscape()
    {
        // Get default printer settings.
        PRINTDLG   pd;
    
        pd.lStructSize = (DWORD) sizeof(PRINTDLG);
        if (GetPrinterDeviceDefaults(&pd))
            {
            // Lock memory handle.
            DEVMODE FAR* pDevMode =
                (DEVMODE FAR*)::GlobalLock(m_hDevMode);
            LPDEVNAMES lpDevNames;
            LPTSTR lpszDriverName, lpszDeviceName, lpszPortName;
            HANDLE hPrinter;
    
            if (pDevMode)
                {
                // Change printer settings in here.
                pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
               // Unlock memory handle.
           lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
           lpszDriverName = (LPTSTR )lpDevNames + lpDevNames->wDriverOffset;
           lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
           lpszPortName   = (LPTSTR )lpDevNames + lpDevNames->wOutputOffset;
    
           ::OpenPrinter(lpszDeviceName, &hPrinter, NULL);
           ::DocumentProperties(NULL,hPrinter,lpszDeviceName,pDevMode,
                               pDevMode, DM_IN_BUFFER|DM_OUT_BUFFER);
    
           // Sync the pDevMode.
           // See SDK help for DocumentProperties for more info.
           ::ClosePrinter(hPrinter);
           ::GlobalUnlock(m_hDevNames);
           ::GlobalUnlock(m_hDevMode);
           }
        }
    }
    

    Und zum Schluss: Ruft diese Funktion innerhalb von CMyWinApp::InitInstance() auf

    Fertig!

    Jetzt ist zumindest das ganze standardmäßig auf Querformat!

    viele Grüße 😉 bolilein

    P.S: Jetzt wüßte ich nur noch gerne, wie man die Option Hochformat DEAKTIVIEREN kann ?? 😕

    [ Dieser Beitrag wurde am 26.06.2003 um 09:36 Uhr von bolilein editiert. ]

    [ Dieser Beitrag wurde am 26.06.2003 um 09:37 Uhr von bolilein editiert. ]


Anmelden zum Antworten