Zum Inhalt springen

C++ (drucken unter Win2k)


berty

Empfohlene Beiträge

Hallo,

ich müsste unter Win2k aus MS Visual C++ drucken und hab leider keine ahnung wie ich das bwerkstelligen kann

es muss nicht schön aussehen hauptsache er druckt einfach eine liste die man vorher angelegt hat (beispielsweise durch ein quiz)

vielen dank scho ma im vorraus

greetz berty

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Berty,

ich hab das mal mit dem CDC (class of device-context) gemacht. Ist zwar schon 'ne Ewigkeit her, aber hier meine Klassenfunktion zum Drucken:


int CMBLabelPrint::Print(CString LabelName, CString LabelTemplateName, CString LabelPath)
{
CDC PrintDC;
CStdioFile LabelTemplate;
DOCINFO DocInfo;
int nRet;

if (LabelName == "")
return LABELPRINT_LABEL_NOT_DEFINED;

if (LabelTemplateName == "")
return LABELPRINT_LABEL_NOT_DEFINED;

if (m_PrinterName == "")
return LABELPRINT_PRINTER_NOT_DEFINED;


// Drucker-Gerätekontext zuweisen
if (!GetPrinterDC(m_PrinterName, PrintDC))
return LABELPRINT_PRINTER_NOT_INSTALLED;

// Dokumentenvorlage zum Lesen öffnen
if (!LabelTemplate.Open(LabelPath + LabelTemplateName, CFile::modeRead | CFile::typeText))
return LABELPRINT_TEMPLATE_NOT_FOUND;

LabelTemplate.SeekToBegin();

DocInfo.cbSize = LabelName.GetLength();
DocInfo.lpszDocName = LabelName;
DocInfo.lpszOutput = NULL;

// Dokumentenstart an Druckertreiber melden
if ((nRet = PrintDC.StartDoc(&DocInfo)) < 0 )
return LABELPRINT_PRINTER_NOT_READY;

// Seitenstart an Druckertreiber melden
if ((nRet = PrintDC.StartPage()) < 0 )
return LABELPRINT_PRINTER_NOT_READY;


BOOL bEOF = TRUE;
int nRow = 0;
CString TemplateLine;

while (bEOF)
{
// Zeile aus Dokumentenvorlage lesen.
bEOF = LabelTemplate.ReadString(TemplateLine);

// Ab Windows2000 benötigt der Treiber für X- und Y- Koorninaten Werte > 0!
PrintDC.TextOut(10, nRow * 100 + 10, TemplateLine, TemplateLine.GetLength());

// Zeilenzähler erhöhen
nRow++;
}

// Seitenende an Druckertreiber melden
if ((nRet = PrintDC.EndPage()) < 0 )
return LABELPRINT_PRINTER_NOT_READY;

// Dokumentenende an Druckertreiber melden
if ((nRet = PrintDC.EndDoc()) < 0 )
return LABELPRINT_PRINTER_NOT_READY;

// Drucker-Gerätekontext löschen
if ((nRet = PrintDC.DeleteDC()) < 0 )
return LABELPRINT_PRINTER_NOT_READY;

// Dokumentenvorlage schliessen
LabelTemplate.Close();

return 0;
}

[/PHP]

Hier noch die Klassenfunktion um den Geräte-Kontext zu erzeugen:

[PHP]
BOOL CMBLabelPrint::GetPrinterDC(CString PrinterName, CDC& PrintDC)
{
char msgbuf[1024];
LPSTR pch;
LPSTR pchFile;
LPSTR pchPort;
BOOL bRet = FALSE;

PrinterName.TrimLeft();
PrinterName.TrimRight();

DWORD size = GetProfileString("PrinterPorts", PrinterName, "", msgbuf, sizeof(msgbuf));

if (size <= 0)
return FALSE;

pch = msgbuf;

for(pchFile = pch; *pch && *pch != ','; pch = CharNext(pch));

if (*pch)
*pch++ = 0;

pchPort = pch;

while (*pch && *pch != ',' && *pch > ' ')
pch = CharNext(pch);

if (*pch)
*pch++ = 0;

try
{ // Exeptionbehandlung PrintDC.CreateDC ...
bRet = PrintDC.CreateDC( pchFile, PrinterName, pchPort, NULL );
}
catch (...)
{
#ifdef _DEBUG
afxDump << "Error at CMBLabelPrint::GetPrinterDC()\n";
#endif
return FALSE;
}

return bRet;
}

Das sollte für deine Zwecke reichen. Schau einfach in der Hilfe über CDC nach. Da solltest du alles weitere finden.

Falls du dennoch mein Beispielprojekt haben willst, dann sag Bescheid...

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi ich nochma ;-)

also irgendwie versteh ich net wirklich viel <-- *Noob bin* :confused:

also ich hab mein prog jetzt soweit fertig und hab alles eigentlich in *.txt files geschrieben (sollen logfiles sein deswegen sieht es so aus: blafasel;blafasel;1;0; )......und nun meine frage:

kann ich die irgendwie ausdrucken???? am besten so wie sie is und alles automatisch ;-) (Textdatei heißt userlog.txt)

ich weiß ich will viel und bin euch unendlich dankbar wenn es endlich klappt

greetz berty

Link zu diesem Kommentar
Auf anderen Seiten teilen

zu shellexecute ja aber ich kann damit leider nichts anfangen da ich damit einfach nicht klarkomme ich hab auhc schon gegoogelt aber leider kann cih damit auch nichts anfangen weil da für mich nur zeichen und buchstaben stehen und ich nicht wirklich weiß wie das funktionieren soll

kann mir das bitte jemand erklären wie es funktioniert einen Datei (TXT) auszudrucken auf dem Standarddrucker....

ich danke euch im vorraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

kann mir das bitte jemand erklären wie es funktioniert einen Datei (TXT) auszudrucken auf dem Standarddrucker....
Zeig uns deinen Code, sag, was genau nicht funktioniert, und wir helfen dir. Wir geben gern Verständnishilfe, fertige Lösungen zum Abschreiben nicht so gern.

ich danke euch im vorraus
Bitte nur ein 'r' ;)
Link zu diesem Kommentar
Auf anderen Seiten teilen

das ist ja kein Problem ich blick nicht wirklich was ich machen soll ich hab aus der MSDN folgenden Code- schnipsel zusammengebastelt

ShellExecute(NULL,print,<C:\\Quiz\\quiz.txt>);

aber er sagt mir nur das er print nicht kennt und das ist mein Hauptproblem und das ich nicht wirklihc weiß ob dieser Schnipse passt

und ich versteh es auhc wen ihr nciht so gerne abschrieben lasst lass ich auhc net so gern

Link zu diesem Kommentar
Auf anderen Seiten teilen

es gibt ja auch noch die F1-Hilfe! Die verwendet man immer dann, wenn die Funktion bekannt ist, aber deren Anwendung Probleme bereitet:


//ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd )
ShellExecute( GetSafeHwnd(), "print", "quiz.txt", NULL, "C:\\Quiz\\", SW_HIDE );
[/PHP]

...so etwa sollte das funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

für was steht den das "GetSafeHwnd()"

ShellExecute( GetSafeHwnd(), "print", "quiz.txt", NULL,    "C:\\Quiz\\"

weil das würde mcih einfach interessieren soll ja nicht so sein das ich es einfach abschreib

EDIT:

ach ja und ich hab amal den code schnipsel ausprobiert und jetzt kommt das er keinen 5 Parameter akzeptiert.....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Berty,

für was steht den das "GetSafeHwnd()"

in meinem Posting hab ich gerade eben noch gesagt, das es die F1-Hilfe gibt.

Stell dir vor, die funktioniert auch bei anderen Befehlen/Funktionen! Wieso markierst du nicht einfach die Funktion und drückst F1?

Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...