A
Martin Richter schrieb:
Dann musst Du auch angeben wie groß Dein Zielbereich sein soll.
Und die Frage kann Dir wohl keiner vonuns beantworten, weil wir nicht wissen was es für eine Bitmap ist.
So wie Du es machst wird 1 Pixel eben 0,1mm, d.h. 100pixel = 1cm.
Deine Angabe: Halb so groß wie das Original verstehe ich darum auch nicht. Wie groß ist denn ein Pixel bei Dir? Mein Monitor steht auf 120DPI d.h. ein Pixel auf meinem Bildschirm ist. In meinem Fall auf dem Monitor etsprich ein Pixel also "virtuellen" 0,212mm.
Mein Abbildungsmodus habe ich ja mit MM_LOMETRIC festgelegt. Hier entspricht eine logische Einheit etwa 0.1 mm. Wird eine Linie mit 10 logischen Einheiten gezeichnet, so wird auf dem Ausgabegerät die Linie etwa 1 mm lang. Meine Vorgabe ist jetzt, das Logo jetzt unabhängig vom Ausgabedevice 1,5 cm hoch darzustellen.
Ich habe jetzt folgende Anpassung vorgenommen (hab ich aus dem Beispiel hier):
BITMAP bi;
Logo.GetBitmap(&bi);
ptSize.cx=bi.bmWidth;
ptSize.cy=bi.bmHeight;
pDC->DPtoLP(&ptSize);
int iNewHeight=150;
int iNewWidth=iNewHeight*ptSize.cx/ptSize.cy; //Skalieren
ptOrg.cx=0;
ptOrg.cy=0;
memDC.DPtoLP(&ptOrg);
pDC->StretchBlt(rcClient.right-iNewWidth,rcClient.top,iNewWidth,-iNewHeight,&memDC,ptOrg.cx,ptOrg.cy,bi.bmWidth,bi.bmHeight,SRCCOPY); //Darstellung in der linken oberen Ecke
Damit scheint es zu funktionieren. Was mir jetzt aber noch unklar ist: in dem Beispiel haben die noch memDC.SetMapMode(pDC->GetMapMode()) den Abbildungsmodus des Speicherkontextes gestellt. Allerdings funktioniert dann mein Beispiel nicht mehr. Ich dachte immer memDC.CreateCompatibleDC(pDC) würde auch der Abbildungsmodus mit übernommen, allerdings hat memDC immer noch MM_TEXT.
Dann hab ich noch eine letzte Frage: wie kann man Tabstops in Zeichenketten ausgaben? Ich habs sowohl mit TextOut wie auch mit DrawText versucht...