Witam,

Aplikacja w wxWidgets, drukowanie. Przypuscmy, ze mam narysowac (wydrukowac) linie pozioma o dlugosci 150 mm. Robie to tak:

int ppiScreenX, ppiScreenY;
 GetPPIScreen(&ppiScreenX, &ppiScreenY);
 int ppiPrinterX, ppiPrinterY;
 GetPPIPrinter(&ppiPrinterX, &ppiPrinterY);

 float scale = (float)((float)ppiPrinterX/(float)ppiScreenX);

 int pageWidth, pageHeight;
 int w, h;
 dc->GetSize(&w, &h);
 GetPageSizePixels(&pageWidth, &pageHeight);
 float overallScale = scale * (float)(w/(float)pageWidth);
 dc->SetUserScale(overallScale, overallScale);

 float scale_factor= (float)(ppiPrinterX/(scale*25.4)); 

Nastepnie, rysowanie linii:

dc->DrawLine(10*scale_factor,10*scale_factor,160*scale_factor, 10*scale_factor); 

Co sie okazuje? Ze na wydruku/podgladzie linia ma dlugosc 110 mm. Tak duzy blad jest nie do przyjecia i chyba nie powinno tak byc. Sposob skalowania wziety wprost z przykladu w dokumentacji wxWidgets.

Cos przeoczylem? W razie czego podam wiecej kodu - nie chcialem wklejac calosci bo byloby to dosc duzo.