在MFC中,可以使用以下方法對指定區域進行重繪:
InvalidateRect
函數來使指定的矩形區域無效化,從而觸發重繪。該函數的原型如下:void InvalidateRect(LPCRECT lpRect = NULL, BOOL bErase = TRUE);
參數 lpRect
指定要無效化的矩形區域,如果為NULL,則表示整個客戶區。參數 bErase
指定是否擦除背景。
OnPaint
函數),可以使用 CPaintDC
對象來獲取設備上下文(CDC
)并進行繪圖操作。例如,可以使用 CDC::Rectangle
函數繪制矩形,CDC::LineTo
函數繪制直線,CDC::TextOut
函數繪制文本等。下面是一個簡單的示例代碼,演示了如何使用 InvalidateRect
和 CPaintDC
進行指定區域的重繪:
// 在窗口類的消息映射中添加以下代碼:
// 響應重繪消息
void CMyWindow::OnPaint()
{
CPaintDC dc(this); // 獲取設備上下文
// 獲取客戶區矩形
CRect rect;
GetClientRect(&rect);
// 繪制整個客戶區
dc.Rectangle(rect);
}
// 響應鼠標點擊消息
void CMyWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect(point.x - 10, point.y - 10, point.x + 10, point.y + 10); // 創建一個矩形區域,大小為20x20
InvalidateRect(&rect); // 使該矩形區域無效化,觸發重繪
CWnd::OnLButtonDown(nFlags, point);
}
在上述代碼中,當鼠標左鍵點擊窗口時,會創建一個以點擊位置為中心的20x20的矩形區域,并調用 InvalidateRect
使該區域無效化。然后,在 OnPaint
函數中,會使用 CPaintDC
對象繪制整個客戶區的矩形。由于調用了 InvalidateRect
,所以整個客戶區會被重繪,但只有指定的矩形區域會被擦除并重新繪制。