Tôi muốn viết một hàm cần đặt vùng cắt trên DC nhưng khôi phục lại bất kỳ vùng cắt hiện có nào trên DC khi nó được thực hiện.sử dụng chính xác của GetClipRgn?
Vì vậy, tôi đã tìm thấy GetClipRgn
nghe có vẻ giống như những gì tôi muốn nhưng có vẻ khó hiểu. Tôi không thể tìm thấy bất kỳ ví dụ về việc sử dụng nó và Petzold không có gì để cung cấp.
Những gì tôi đã đưa ra được điều này:
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);
}
}
Nó chỉ có vẻ kỳ lạ mà tôi cần để tạo ra một khu vực để có được khu vực hiện nay.
Đây có phải là cách sử dụng chính xác không?
Có cách nào tốt hơn để đạt được hiệu quả tương tự không?
Bạn có thực sự cần một khu vực "nhỏ" (thường được gọi là "Khu vực quan tâm - ROI) mà là một phần phụ của khu vực khách hàng đầy đủ không? GetClientRect() sẽ cung cấp cho bạn khu vực có thể kéo đầy đủ. – JustBoo
Vâng, đó là một chức năng kỳ lạ Mã của bạn có vẻ ổn, –
@Hans - cảm ơn tôi cảm thấy tốt hơn về nó bây giờ Có lẽ chức năng win32 kỳ lạ nhất mà tôi từng sử dụng ... – markh44