Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.05.2008, 19:08

Problem beim drucken

Hi leute,
Nachdem ich das Problem mit der Druckerabfrage gelößt worden war, wollte ich nun , dass das Programm druckt, was es aber nicht tut. Auch bei den Beispielprogrammen aus dem Buch Windowsprogrammierung, außer POPPAD, funktioniert es ebenfals nicht. Am anfang muss ich so eine Datei speichern, wenn ich dieses getahen habe, erscheint kurz das Druckerzeichen neben der Uhr, und dann ist alles vorbei. Hier poste ich jetzt mal den Code, ich hoffe er hilft

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <windows.h> 
// Hauptprogramm 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{ 
 // Variablen: 

 DWORD dwNeeded, dwReturned; 
 HDC hdc; 
 PRINTER_INFO_4 * pInfo;  
 DOCINFO di = {sizeof(DOCINFO), TEXT("Drucker")};

 EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &dwNeeded, &dwReturned); 
 pInfo = (PRINTER_INFO_4 *) malloc(dwNeeded); 
 EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pInfo, dwNeeded, &dwNeeded, &dwReturned);  

 hdc = CreateDC(NULL, pInfo->pPrinterName, NULL, NULL); 

 if(hdc != NULL) 
 { 
  StartDoc(hdc, &di);
  StartPage(hdc);   
  Rectangle(hdc, 5, 5, 5, 5);
  EndPage(hdc);  
  EndDoc(hdc);
 }

 free(pInfo); 
 DeleteDC(hdc);
 return 0;
}

Vielen Dank für die Hilfe schon mal im Voraus.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

14.05.2008, 20:00

Schonmal die Rückgabewerte der Funktionen überprüft?
@D13_Dreinig

3

15.05.2008, 16:09

Habe den Code um geschrieben, bleibt aber immer noch bei den alten Folgen, aber die Funktionen werden aufgerufen. Hier der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// MyPrinter 

// 

#include <iostream>
#include <windows.h> 
// Hauptprogramm 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{ 
 // Variablen: 

 DWORD dwNeeded, dwReturned; 
 HDC hdc; 
 PRINTER_INFO_4 * pInfo;  
 DOCINFO di = {sizeof(DOCINFO), TEXT("Drucker")}; 

 EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &dwNeeded, &dwReturned); 
 pInfo = (PRINTER_INFO_4 *) malloc(dwNeeded); 
 EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pInfo, dwNeeded, &dwNeeded, &dwReturned);  
 
  
 hdc = CreateDC(NULL, pInfo->pPrinterName, NULL, NULL); 

 if(hdc != NULL) 
 { 
  if(StartDoc(hdc, &di) > 0) 
  {
   MessageBox(NULL, TEXT("StartDoc funktioniert!"), TEXT("INFO"), MB_OK);
  if(StartPage(hdc) > 0) 
  {              
   MessageBox(NULL, TEXT("StartPage funktioniert!"), TEXT("INFO"), MB_OK);
  Rectangle(hdc, 5, 5, 5, 5);
  EndPage(hdc);  
  EndDoc(hdc);  
  } 
  else 
  { 
  MessageBox(NULL, TEXT("Fehler"), TEXT("ERROR"), MB_OK); 
  }
  } 
  else 
  { 
   MessageBox(NULL, TEXT("Fehler"), TEXT("ERROR"), MB_OK);
  }
 }

 free(pInfo); 
 DeleteDC(hdc);
 return 0;
}

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

15.05.2008, 17:03

Schau mal im Ereignisprotokoll von Windows, da steht vllt was drin. Dazu einfach Rechtsklick auf Arbeitsplatz->Verwalten. Dann rechts im Baum auf "System"->"Ereignisanzeige" und mal durschauen.

Socke

5

16.05.2008, 16:57

Da sind 100 oder 1000 Einträge! Nach was soll ich den genau suchen?

6

16.05.2008, 22:42

Programm ausführen und schauen, ob da ein neuer Eintrag ist.

7

17.05.2008, 11:08

Das ist kein neuer Eintrag!

8

20.05.2008, 10:27

Kann mir keiner helfen? :(

9

15.06.2008, 11:24

Ich habe es nun doch noch geschaft zu drucken :) , weil ich den Gerätekontext für den Drucker mit hilfe des Dialoges zum Drucken aus der Datei commdlg bekommen habe. Hier der Code für alle die das gleiche Problem haben oder sich für dafür interssieren.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// MyPrinter 

// 

#include <windows.h>  
#include <commdlg.h>
// Hauptprogramm 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{ 
 // Variablen:  

 DOCINFO di = {sizeof(DOCINFO), TEXT("Drucker")}; 
 PRINTDLG printdlg = {sizeof(PRINTDLG)}; 
 HDC hdcprinter; 

 printdlg.Flags = PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION; 

 PrintDlg(&printdlg); 

 hdcprinter = printdlg.hDC;   
 StartDoc(hdcprinter, &di); 
 StartPage(hdcprinter); 
 TextOut(hdcprinter, 100, 100, TEXT("Hallo Drucker!"), 15);
 EndPage(hdcprinter); 
 EndDoc(hdcprinter);

 return 0;
}
//

// **************************************************************************************

Werbeanzeige