Auch ich hatte dieses Problem in der Vergangenheit. Ich habe LineDDA und ein Callback-Proc verwendet.
struct LineData{
CDC* pDC;
COLORREF crForegroundColor;
COLORREF crBackgroundColor;
};
.
.
.
LineData* pData = new LineData;
pData->crForegroundColor = crForegroundColor;
pData->crBackgroundColor = crBackgroundColor;
pData->pDC = pdc;
LineDDA(nStartx, nStarty, nEndPointX, nEndPointY, LineDDAProc, (LPARAM) pData);
delete pData;
.
.
.
void
LineDDAProc(int x, int y, LPARAM lpData)
{
static short nTemp = 0;
LineData* pData = (LineData*) lpData;
if (nTemp == 1)
pData->pDC->SetPixel(x, y, pData->crForegroundColor);
else
pData->pDC->SetPixel(x, y, pData->crBackgroundColor);
nTemp = (nTemp + 1) % 2;
}
Es ist vielleicht nicht der effizienteste Zeichenalgorithmus, aber man hat jetzt auch die volle Kontrolle über die Punktabstände. Ich habe mich für diesen Ansatz entschieden, weil es andere nicht-native Stiftstile gab, die ich für das Rendering von Linien verwendet habe und die ein Bitmuster verwendeten. Ich habe dann das Bit durchlaufen lassen und setpixel für die 'on'-Bits verwendet. Das hat gut funktioniert und die Anzahl der nützlichen Linienstile erhöht.