Я никогда не использовал этот API сам, но после прочтения документации MSDN я подумал, что он работает так:
Сначала вам нужно вызвать GetGlyphOutline
с параметром lpvBuffer
, установленным на NULL
,Затем функция вернет необходимый размер буфера.Затем вам нужно будет выделить буфер с таким размером, а затем снова вызвать функцию с lpvBuffer
, установленным в только что созданный вами буфер.
Если вы посмотрите на документацию для TTPOLYGONHEADER
, там написано:
За каждой структурой TTPOLYGONHEADER следует одна или несколько структур TTPOLYCURVE.
Итак,в основном вы должны сделать что-то вроде этого:
BYTE* pMyBuffer = NULL;
...
TTPOLYGONHEADER* pPolyHdr = reinterpret_cast<TTPOLYGONHEADER*>(pMyBuffer);
TTPOLYCURVE* pPolyCurve = reinterpret_cast<TTPOLYCURVE*>(pMyBuffer + sizeof(TTPOLYGONHEADER));
Затем проверьте элемент pPolyCurve->cpfx
, который содержит количество структур POINTFX
.Затем вы можете перебрать все точки, выполнив что-то вроде этого:
for (WORD i = 0; i < pPolyCurve->cpfx: ++i)
{
pCurve->apfx[i].x;
pCurve->apfx[i].y;
}
Поскольку TTPOLYGONHEADER
не сообщает вам, сколько TTPOLYCURVE
структур находится в буфере, я думаю, вам придетсяследите за этим самостоятельно, вычитая размер отдельных структур из размера вашего буфера и продолжайте, пока не достигнете 0.
Пожалуйста, извините за любые потенциальные ошибки, поскольку я сам не проверял это:)