Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Drucken aus dem Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
07.03.2005, 14:05 Uhr
Mutabor



Hallo Leute
Ich habe hier eine Funktion, die in einer Dialogbasierenden Anwendung,
Daten ausdruckt.
Wie kann ich erreichen das der Drucker automatisch auf Hochformat
oder Querformat eingestellt werden kann?

Danke im voraus.

c++:
//Funktion für das drucken aus dem Programm
void CVokabelEingabeEinzel::OnBprintProg()
{
// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen

CDC dcPrint;
long printzeile = 50;

// Ein CPrintDialog-Objekt konstruieren
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);
if (dlgPrint.DoModal()==IDOK)
{
dcPrint.Attach(dlgPrint.GetPrinterDC());
// Eine DOCINFO-Struktur erzeugen und füllen
DOCINFO myPrintJob;
myPrintJob.cbSize = sizeof(myPrintJob);
myPrintJob.lpszDocName = "MeinDruckAuftrag";
myPrintJob.lpszOutput = NULL;
myPrintJob.lpszDatatype = NULL;
myPrintJob.fwType = NULL;
// Ausdruck des Dokuments starten
if (dcPrint.StartDoc(&myPrintJob)>=0)
{
// Eine Seite beginnen
dcPrint.StartPage();
printzeile+= 100;
PrintVokabel(printzeile);

// Seite auswerfen
dcPrint.EndPage();
// Dokument schließen
dcPrint.EndDoc();
}
// Druckergerätekontext löschen
dcPrint.DeleteDC();
}
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.03.2005, 16:03 Uhr
Th



Dafür muß die Struktur DEVMODE benutzt werden: 'dmOrientation' kann auf DMORIENT_PORTRAIT oder DMORIENT_LANDSCAPE gesetzt werden.

Das Handle auf diese Struktur muß dann in PRINTDLG::hDevMode gesetzt werden.
Diese Struktur erhält man über CPrintDlg::m_pd.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.03.2005, 15:04 Uhr
~Mutabor
Gast


Hallo Th

Danke für deine Antwort.
Ich habe versucht die Struktur einzubinden, aber es klappt nicht.
Könntest Du mal den obigen Code um die Struktur und den Handle erweitern?
Habe in dieser Beziehung wenig Ahnung.

Gruß Mutabor.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.03.2005, 15:55 Uhr
Th



Hi, hier mein Ansatz (ohne es getestet zu haben).


C++:
// Ein CPrintDialog-Objekt konstruieren
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);

if(!dlgPrint.GetDefaults())
    return; // no default printer available!!!

const PRINTDLG &pd = dlgPrint.m_pd;

if(pd.hDevMode == NULL) // sollte jetzt gesetzt sein!!!
   return;

const DEVMODE *pDM = GlobalLock(pd.hDevMode);

if(pDM->dmFields & DM_ORIENTATION)  // kann die Orientierung gesetzt werden
    pDM->dmOrientation = DMORIENT_PORTRAIT; // oder DMORIENT_LANDSCAPE

if (dlgPrint.DoModal()==IDOK)
{
    // ...
}

GlobalUnlock(pd.hDevMode);



Ich hoffe, du kennst dich mit den Windows-API Funktionen ein wenig aus (Handles etc).

Melde dich, ob es läuft...

Dieser Post wurde am 08.03.2005 um 15:57 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.03.2005, 16:59 Uhr
~Mutabor
Gast


Hallo Fh

Habe noch einen Compiler Fehler.

const DEVMODE *pDM = GlobalLock(pd.hDevMode);

'initializing': 'void*' kann nicht in 'const struct_devicemoeA*' konvertiert werden.

Gruß Mutabor
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.03.2005, 11:12 Uhr
Th



Hi,

dann einfach casten...

C++:
const DEVMODE *pDM = (const DEVMODE *)GlobalLock(pd.hDevMode);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.03.2005, 14:02 Uhr
~Mutabor
Gast


Hallo

Habe leider eine weitere Fehlermeldung.


C++:


pDM->dmOrientation = DMORIENT_PORTRAIT; // oder DMORIENT_LANDSCAPE



Fehlermeldung
L-Wert gibt ein konstantes Objekt an.

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.03.2005, 14:14 Uhr
Th



Sorry, du willst den Wert ja verändern, also kein const (ein bißchen C++ kannst du aber?):


C++:
DEVMODE *pDM = (DEVMODE *)GlobalLock(pd.hDevMode);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.03.2005, 16:45 Uhr
Th



Und klappt es jetzt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.03.2005, 18:17 Uhr
~Mutabor
Gast


Hi Th

Der Code wird jetzt ohne Fehler kompiliert.

Nur dlgPrint.DoModal(); gibt eine 2 zurück und deshalb wird der Druckauftrag
nicht ausgeführt.

Wenn ich deinen Code auskommentiere, dann liefert dlgPrint.DoModal(); eine 1 zurück
und der Druckauftrag wird ausgeführt.
Hast du noch eine Idee?

Habe was wichtiges dazugelehrnt.
Das mit const habe ich so verstanden, dass das zwingend vorgeschrieben wird.
Bin bis jetzt in meinen Programmen ohne const ausgekommen und
daher war mir das nicht so geläufig. Danke.

Gruss M
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: