Wie kann ich Kerning-Informationen für GDI erhalten, um sie dann in GetKerningPairs zu verwenden? Das besagt, dass documentationKerning-Informationen erhalten
Die Anzahl von Paaren in der lpkrnpair Array. Wenn die Schriftart mehr als nNumPairs Kerning-Paare enthält, gibt die Funktion einen Fehler zurück.
Allerdings weiß ich nicht, wie viele Paare übergeben werden, und ich sehe keine Möglichkeit, danach zu fragen.
EDIT # 2
Hier ist meine Fill-Anwendung, die ich auch versucht habe, das immer für die Anzahl der Paare 0 für jede Schriftart zu erzeugen. GetLastError gibt immer auch 0 zurück.
#include <windows.h>
#include <Gdiplus.h>
#include <iostream>
using namespace std;
using namespace Gdiplus;
int main(void)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Font* myFont = new Font(L"Times New Roman", 12);
Bitmap* bitmap = new Bitmap(256, 256, PixelFormat32bppARGB);
Graphics* g = new Graphics(bitmap);
//HDC hdc = g->GetHDC();
HDC hdc = GetDC(NULL);
SelectObject(hdc, myFont->Clone());
DWORD numberOfKerningPairs = GetKerningPairs(hdc, INT_MAX, NULL);
cout << GetLastError() << endl;
cout << numberOfKerningPairs << endl;
GdiplusShutdown(gdiplusToken);
return 0;
}
EDIT Ich habe versucht, die folgenden zu tun, es aber gab mir noch 0.
Font* myFont = new Font(L"Times New Roman", 10);
Bitmap* bitmap = new Bitmap(256, 256, PixelFormat32bppARGB);
Graphics* g = new Graphics(bitmap);
SelectObject(g->GetHDC(), myFont);
//DWORD numberOfKerningPairs = GetKerningPairs(g->GetHDC(), -1, NULL);
DWORD numberOfKerningPairs = GetKerningPairs(g->GetHDC(), INT_MAX, NULL);
Damit das funktionieren würde, müsste ich meine Schriftarten dc verwenden, wie könnte ich das bekommen? – chadb
@ chadb: Erstellen Sie einen Domänencontroller und wählen Sie die Schriftart aus. Normalerweise möchten Sie einen DC verwenden, der mit dem endgültigen Ziel kompatibel ist. Wenn also die Ausgabe auf den Bildschirm geht, erstellen Sie einen DC, der mit dem Bildschirm kompatibel ist. Wenn es zum Drucker geht, erstellen Sie einen für den Drucker. –
Hmm, ich habe das probiert und ich bekomme immer noch 0. Ich habe meinen obigen Code aktualisiert, da er hier nicht passt. – chadb