我正在使用C++和GDI + 我將製作一個矢量繪圖應用程序,並希望使用GDI +繪圖。優化GDI +繪圖?
心中已經創建了一個簡單的測試來熟悉它:
case WM_PAINT:
GetCursorPos(&mouse);
GetClientRect(hWnd,&rct);
hdc = BeginPaint(hWnd, &ps);
MemDC = CreateCompatibleDC(hdc);
bmp = CreateCompatibleBitmap(hdc, 600, 600);
SelectObject(MemDC,bmp);
g = new Graphics(MemDC);
for(int i = 0; i < 1; ++i)
{
SolidBrush sb(Color(255,255,255));
g->FillRectangle(&sb,rct.top,rct.left,rct.right,rct.bottom);
}
for(int i = 0; i < 250; ++i)
{
pts[0].X = 0;
pts[0].Y = 0;
pts[1].X = 10 + mouse.x * i;
pts[1].Y = 0 + mouse.y * i;
pts[2].X = 10 * i + mouse.x;
pts[2].Y = 10 + mouse.y * i;
pts[3].X = 0 + mouse.x;
pts[3].Y = (rand() % 600) + mouse.y;
Point p1, p2;
p1.X = 0;
p1.Y = 0;
p2.X = 300;
p2.Y = 300;
g->FillPolygon(&b,pts,4);
}
BitBlt(hdc,0,0,900,900,MemDC,0,0,SRCCOPY);
EndPaint(hWnd, &ps);
DeleteObject(bmp);
g->ReleaseHDC(MemDC);
DeleteDC(MemDC);
delete g;
break;
我想知道如果我這樣做是正確的,或者如果我殺了CPU領域。因爲現在需要〜1秒來渲染,我希望能夠很快地重繪它。 謝謝
在真實的情況下,只有找出屏幕上的部分才能重繪並且只重繪帶有這個邊界的元素才更好?
前一段時間我問了一個相關的問題。也許這可以給你幾個指針:http://stackoverflow.com/questions/957573/winforms-how-to-speed-up-invalidate – Pedery 2010-05-15 05:09:04