Hallo allerseits,
ich erstelle derzeit ein MFC ActiveX Control, das in MS Word eingebunden und einen Barcode darstellen soll. Das Einbinden sowie das Realisieren der Properties etc klappt auch soweit.
Das Problem entsteht vielmehr bei der Darstellung. CDC::CreatePointFont() beispielsweise kann ich nicht nutzen, sondern muss vielmehr auf CDC::CreateFont() zurückgreifen. Kopfzerbrechen bereitet mir CDC::GetTextExtentW(). Im Testcontainer für ActiveX Module des Visual Studios arbeitet die Methode einwandfrei. Wenn das OCX jedoch im Word ausgeführt wird, liefert sie falsche Werte, die offensichtlich direkt mit der Breite bzw. Höhe des Controls zusammenhängen.
Beispiel:
void CCode128::smiley:raw(CDC\* pdc, CRect cr)
{
CString Inhalt;
_...snip..._
CFont font;
font.CreateFont(text\_rect.Height(),text\_rect.Height()/2,
0,0,FW\_NORMAL,FALSE,FALSE,FALSE,ANSI\_CHARSET,
OUT\_DEFAULT\_PRECIS,CLIP\_DEFAULT\_PRECIS,
DEFAULT\_QUALITY, DEFAULT\_PITCH,\_T("Arial"));
pdc-\>SelectObject(&font);
CSize siz = pdc-\>GetTextExtent(Inhalt);
_...snip..._
}
In diesem Beispiel enthält die Variable size jeweils die 8-fache Größe der ClientArea. Ich benötige jedoch die Größe des Strings, um ihn zentriert darstellen zu können, da die Methode CDC:rawText() mit DT_CENTER auch nicht korrekt funktioniert.
Weiß jemand wo da der Knackpunkt sein könnte?
Danke im Voraus,
Andreas