DoModal funzt nicht



  • Hallo,

    ich möchte meine Seitenzahlen bevor der Druckerdialog geöffnet wird speichern um sie dann im Dialog anzuzeigen. Die Seitenzahlen meines Dokuments sind in sitecount gespeichert. Wenn ich nachfolgenden DoModal aufrufe erhalte ich eine Initialisierungsfehlermeldung CODE: 41002. Weis jemand woran das liegt bzw. kennt jemand alternativen ?

    // Druckerdialog kreieren und einrichten
    	CPrintDialog dlgPrint(FALSE, PD_PAGENUMS);
    	dlgPrint.m_pd.nMinPage = 1;        // Fehler !!!
    	dlgPrint.m_pd.nMaxPage = sitecount-1;      // Fehler
    
    	if(dlgPrint.DoModal()==IDOK) 
    	{ 
    		dlgPrint.GetDefaults();
    ...
    


  • Hi!

    Ich habe gerade mal deinen Quelltext ausprobiert, bei mir gibt es leider weder einen Fehler noch einen Dialog. 😞
    Der geht da kommentarlos drüber.

    Dabei ist mir aber eine Idee gekommen. Wenn du die Standardfunktionen nutzt, hast du ja dieses pInfo. Warum nutzt du das nicht? Damit kannst du den automatisch erscheinenden Druckdialog beeinflussen.



  • welche Standardfunktionen meinst du ?

    Komisch bei mir öffnet er den Dialog aber meldet einen Fehler. Habe jetzt mal das komplette Struct m_pd initialisiert aber bekomme jetzt einen Speicherfehler weist du vieleicht warum ?

    CPrintDialog dlgPrint(FALSE);
    	dlgPrint.m_pd.lStructSize						= sizeof(PRINTDLG);
    	dlgPrint.m_pd.nFromPage							= 1;
    	dlgPrint.m_pd.nToPage								= sitecount-1;
    	dlgPrint.m_pd.hDC										= NULL;
    	dlgPrint.m_pd.Flags									= PD_ALLPAGES;
    	dlgPrint.m_pd.lCustData							= 0L;
    	dlgPrint.m_pd.nMinPage							= 1;
    	dlgPrint.m_pd.nMaxPage							= sitecount-1;
    	dlgPrint.m_pd.nCopies								= 1;
    	dlgPrint.m_pd.hDevMode							= NULL;
    	dlgPrint.m_pd.hDevNames							= NULL;
    	dlgPrint.m_pd.hInstance							= NULL;
    	dlgPrint.m_pd.hPrintTemplate				= NULL;
    	dlgPrint.m_pd.hSetupTemplate				= NULL;
    	dlgPrint.m_pd.hwndOwner							= NULL;
    	dlgPrint.m_pd.lpfnPrintHook					= NULL;
    	dlgPrint.m_pd.lpfnSetupHook					= NULL;
    	dlgPrint.m_pd.lpPrintTemplateName		= NULL;
    	dlgPrint.m_pd.lpSetupTemplateName		= NULL;
    
    	//BOOL def = dlgPrint.GetDefaults();
    
    	if(dlgPrint.DoModal()==IDOK) 
    	{ 
    		dlgPrint.GetDefaults();
    


  • An Funktionen meinte ich die in CView:

    BOOL CDruckenView::OnPreparePrinting(CPrintInfo* pInfo)
    {
    	// Standardvorbereitung
    	return DoPreparePrinting(pInfo);
    }
    
    void CDruckenView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* pInfo)
    {
    }
    
    void CDruckenView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    	// ZU ERLEDIGEN: Hier Bereinigungsarbeiten nach dem Drucken einfügen
    }
    
    void CDruckenView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
            // Hier wird gedruckt
    }
    

    Mit DoPreparePrinting kriegst du sogar gleich den Dialog geliefert. 😃

    PS:
    Ich bin leider auch erstmal nur am Ausprobieren, was das Drucken angeht. Allerdings kann ich auf Anhieb nix erkennen, was falsch aussieht.
    Viel Glück noch 🙂



  • ok ich probiers mal danke erstmal



  • Joi schrieb:

    ok ich probiers mal danke erstmal. Aber ich programmiere keine SDI oder MDI nur eine einfache dialoganwendung kann ich das da auch so machen ?



  • Urgs!

    Nee, da geht das nicht so einfach. Aber es gab schon zigmal was zu dem Thema, nutz mal die Suchfunktion.

    Außerdem kannst du ja noch auf www.codeproject.com gucken.



  • Hab da was gefunden mit CPrintInfo gehts vieleicht probiere grad.


Anmelden zum Antworten