Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Maßeinheitengenau ein Canvas ausdrucken

  Alt 27. Mär 2007, 20:20
Zitat von PAX:
PHYSICALHEIGHT scheint mir bei der GetDeviceCaps-Funktion am zutreffendsten zu sein.
Das ist soweit korrekt!

Zitat von PAX:
Auch frag ich mich schon seit längerem, was der Typ "Handle" eigentlich genau ist. Ein Zeiger?
Es handelt sich dabei mehr um eine Identifikationsnummer, der Sinn kommt aber dem eines Zeigers sehr nahe/gleich. Windows verwaltet alle Ressourcen über Handles. Ein Handle ist dabei ein Zahl (glaube ein DWord), die eine beliebige Ressource identifiziert. Letztlich geht man hier aber über eine zusätzliche Indirektion sicher, dass niemand direkt auf Adressen zugreift. Man muss immer den "Umweg" über Windows-Funktionen gehen (ohne ginge es eh nicht), die dann sicherstellen können, dass ein konsistenter Zustand erhalten bleibt.

Zitat von PAX:
Code:
 if(!PrintDialog1->Execute()) return;

//Form1->Caption=SetMapMode(GetDC(Form1->Handle),MM_HIMETRIC);
int i=GetDeviceCaps(GetDC(Handle),PHYSICALHEIGHT);
Form1->Caption =i;
Du musst für das Handle der Funktion GetDC das Handle des Druckers verwenden. Du müsstest in der Bibliothek Printers eine Funktion printer() finden, die ein TPrinter-Objekt zurück gibt. Dieses Objekt hat dann wiederum die Eigenschaft Handle besitzt. Übergibst Du dieses Handle an die Methode, solltest Du einen korrekten Wert bekommen (wäre zumindest der Delphi Weg, sollte aber für die Borland C++ IDE gleich sein).

Ansonsten bliebe der nur der Weg über die Methode EnumPrinters (Win-API), über die Du dann das Handle des Druckers ermitteln müsstest.

Gruß Der Unwissende
  Mit Zitat antworten Zitat