2010-08-13 27 views
6

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?

+0

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

+5

Vâng, đó là một chức năng kỳ lạ Mã của bạn có vẻ ổn, –

+1

@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

Trả lời

3

Vâng điều gần gũi nhất với một câu trả lời đúng là Hans passant của bình luận:

Vâng, đó là một chức năng kỳ lạ. Mã của bạn có vẻ ổn.

1

Sẽ int SelectClipRgn(__in HDC hdc, __in HRGN hrgn); thực hiện công việc?

Chức năng SelectClipRgn chọn vùng làm vùng cắt hiện tại cho ngữ cảnh thiết bị được chỉ định.

Chỉ sử dụng bản sao của khu vực đã chọn. Bản thân khu vực có thể được chọn cho bất kỳ số ngữ cảnh thiết bị nào khác hoặc nó có thể bị xóa.

Hàm SelectClipRgn giả định rằng tọa độ cho một vùng được xác định trong đơn vị thiết bị.

Để xóa vùng cắt của bối cảnh thiết bị, hãy chỉ định một núm điều khiển vùng NULL.

4

tôi sử dụng SaveDCRestoreDC chức năng:

Các SaveDC chức năng tiết kiệm tình trạng hiện tại của các quy định thiết bị ngữ cảnh (DC) bằng cách sao chép dữ liệu mô tả đối tượng được chọn và đồ họa chế độ (ví dụ dưới dạng bitmap, cọ vẽ, bảng màu, phông chữ, bút, vùng, vẽ chế độ và chế độ ánh xạ) vào một ngăn xếp ngữ cảnh.

Cảm giác sạch hơn.

Các vấn đề liên quan