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.