[C++] GetGlyphOutline

HoB-Lila

Grünschnabel
Hallo zusammen,

ich möchte mal euren Expertenrat einholen. :)

Und zwar muss ich zunächst einmal den Rahmen abstecken:

Ich nutze Visual Studio 2005, allerdings nicht dne MS Compiler, sondern einen anderen, der stark native C++ ist (CAA um genau zu sein, das wird hier aber vielen nichts sagen). Das Bringt einige Probleme mit sich, die hier aber nicht so sehr rein spielen dürften. Ich kann z.B. keine Resource-Files verwenden. Mein Problem tritt aber mit beiden Compilern unter Windows XP auf.

Mein Problem:

Ich möchte die Methode GetGlyphOutline() (bzw. GetGlyphOutleineA()) verwenden um TrueType interpretieren zu können. Es muss nicht vom System abgebildet werden, darum kümmere ich mich. Ich brauch nur dieses "Polygonzug" von einzelnen Glyphen, die ich dann weiter verwenden möchte. Mein erstes Problem war, dass ich keinen hDC zur Verfügung habe und wo ich den her bekomme, das habe ich nun testweise nach hinten verlagert, da GetGlyphOutleine() wichtiger ist.

Zum Testen habe ich folgenden Code:

Code:
void CDlgMFCTestDlg::OnBnClickedOk()
{
	HDC hdcWork = 0;
	CDC *cdcWork;

	GLYPHMETRICS lpgmWork;
	MAT2 MatWork; // = new MAT2();
	DWORD dwOUT = 0;

	CFont *fontMy = new CFont();
	fontMy->CreateFont(10,10,0,0,FW_DONTCARE, 0,0,0,ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, NULL);
	PicboxMy.SetFont(fontMy);
	buttonOK.SetFont(fontMy);
	cdcWork = buttonOK.GetDC();
	hdcWork = cdcWork->GetSafeHdc();
	MoveToEx(hdcWork, 1, 1, NULL);
	int iTest =GetGlyphOutline(hdcWork, 71, GGO_NATIVE, &lpgmWork, 0, NULL, &MatWork);

	//OnOK();
}

Ist jetzt nicht besonders schön, zeigt aber was ich will. :)
Und zwar übergebe ich den hDC von einem Control (am liebsten eine PictureBox, aber das ist egal,m hauptsache Polygonzug mit Beziercurven :))
Jedenfalls kann die Methode zweimal aufgerufen werden. Einmal mit NULL-Werten, dann gibt sie die Größe des zu übergebenden Arrays in Bytes zurück und dann einmal mit Array, dann wird dieses befüllt.
Bei mir gibt sie in dem Zustand aber -1 zurück und ich weiß ehrlich gesagt nicht warum.
Wahrscheinlich sind meien C++-Kenntnisse zu gering.
Wäre für jeden Tipp dankbar.

Im VB krieg ich das wunderbar hin, aber das ist ja auch was für Anfänger ^^

Grüße,
Henry
 
Hab's gefunden, war doch ganz billig:

Code:
	hdcWork = GetDC(NULL);
	SelectObject(hdcWork, CreateFont(400, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, PROOF_QUALITY, FF_DONTCARE, L"arial"));
	iTest = GetGlyphOutline(hdcWork, WORD('A'), GGO_NATIVE, &gmWork, 0, NULL, &matWork);
	ReleaseDC(NULL, hdcWork);
 
Zurück