我是新來使用GDI +,我不知道如何解決創建和配置,我有對象的一塌糊塗。現在所有的程序需要做的是處理重複WM_PAINT
消息和增加度更新DrawPie
各一次。如何正確WM_PAINT油漆與GDI +
我在窗口啓動時調用了GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
,在WM_DESTROY
上調用了GdiplusShutdown(gdiplusToken);
。
度接近頂部定義的全局變量:
volatile double degrees = 0;
這裏是我的WM_PAINT
:
case WM_PAINT: {
hdc = BeginPaint(hWnd, &ps);
Graphics g(hdc);
Pen p(Color::Green);
if (degrees > 0) {
if (degrees == 360) {
g.DrawEllipse(&p, 0, 0, 100, 100);
} else {
g.DrawPie(&p, 0, 0, 100, 100, -90, degrees);
}
}
EndPaint(hWnd, &ps);
break;
}
這裏是更新程度和更新窗口中的功能(這是在單獨線程):
void UpdateDegrees() {
for (;;) {
if (globalHWND != NULL) {
degrees += 0.1;
InvalidateRect(globalHWND, NULL, TRUE);
UpdateWindow(globalHWND);
}
}
}
如果我運行它,我得到一個「實」的餅形象this,我以爲它只是在每一個角度重新繪製本身。它需要像this,換言之,清除圖形它每次重繪自己之前。 (對不起,我想我需要10個代表來發布內嵌圖片)
我知道我沒有正確初始化和/或處理我的圖形,但我真的不知道該怎麼做。任何幫助將不勝感激!謝謝。
永遠不要從工作線程執行此操作,繪畫不是線程安全的。如果想要動畫,則使用SetTimer(),選擇15或31的間隔,然後調用InvalidateRect()。計算一個合適的角度增量。 –