我想編寫一個函數,需要在DC上設置剪切區域,但是在完成時還原DC上任何現有的剪切區域。正確使用GetClipRgn?
所以我發現GetClipRgn
這聽起來像我想要的,但似乎令人困惑。我找不到任何使用它的例子,Petzold沒有提供。
我想出了是這樣的:
void DrawStuff(HDC hDC)
{
HRGN restoreRegion = CreateRectRgn(0, 0, 0, 0);
if (GetClipRgn(hDC, restoreRegion) != 1)
{
DeleteObject(restoreRegion);
restoreRegion = NULL;
}
//
// Set new region, do drawing
//
SelectClipRgn(hDC, restoreRegion);
if (restoreRegion != NULL)
{
DeleteObject(restoreRegion);
}
}
它只是似乎不可思議,我需要爲了得到當前區域創建一個區域。
這是正確的用法嗎?
是否有更好的方法來達到同樣的效果?
您是否真的需要一個「小」區域(通常稱爲「感興趣區域 - 投資回報率」),它是整個客戶區的子部分?GetClientRect()將爲您提供完整的可繪製區域。獲取該區域的一部分 – JustBoo 2010-08-13 15:18:10
是的,這是一個奇怪的功能,你的代碼看起來沒問題, – 2010-08-13 17:11:24
@Hans - 謝謝我現在對它感覺更好,可能是我用過的最奇怪的win32函數... – markh44 2010-08-16 09:42:20