這個區域稱為「無效區域」或「更新區域」。正是顯示區域內無效區域的存在,才會讓Windows將一個WM_PAINT訊息放在應用程式的訊息佇列中。只有在顯示區域的某一部分失效時,視窗才會接受WM_PAINT訊息。
儘管視窗訊息處理程式一旦接收到WM_PAINT訊息之後,就準備更新整個顯示區域,但它經常只需要更新一個較小的區域(最常見的是顯示區域中的矩形區域)。顯然,當對話框覆蓋了部分顯示區域時,情況即是如此。在擦除對話框之後,需要重畫的只是先前被對話框遮住的矩形區域。
這個區域稱為「無效區域」或「更新區域」。正是顯示區域內無效區域的存在,才會讓Windows將一個WM_PAINT訊息放在應用程式的訊息佇列中。只有在顯示區域的某一部分失效時,視窗才會接受WM_PAINT訊息。
Windows內部為每個視窗保存一個「繪圖信息結構」,這個結構包含了包圍無效區域的最小矩形的坐標以及其它信息,這個矩形就叫做「無效矩形」,有時也稱為「無效區域」。如果在視窗訊息處理程式處理WM_PAINT訊息之前顯示區域中的另一個區域變為無效,則Windows計算出一個包圍兩個區域的新的無效區域(以及一個新的無效矩形),並將這種變化後的信息放在繪製信息結構中。Windows不會將多個WM_PAINT訊息都放在訊息佇列中。
視窗訊息處理程式可以通過呼叫InValidateRect使顯示區域內的矩形無效。如果訊息佇列中已經包含一個WM_PAINT訊息,Windows將計算出新的無效矩形。否則,它將一個新的WM_PAINT訊息放入訊息佇列中。在接收到WM_PAINT訊息時,視窗訊息處理程式可以取得無效矩形的坐標(我們馬上就會看到這一點)。通過呼叫GetUpdateRect,可以在任何時候取得這些坐標。
在處理WM_PAINT訊息處理期間,視窗訊息處理程式在呼叫了BeginPaint之後,整個顯示區域即變為有效。程式也可以通過呼叫ValidateRect函式使顯示區域內的任意矩形區域變為有效。如果這呼叫具有令整個無效區域變為有效的效果,則目前佇列中的任何WM_PAINT訊息都將被刪除。
這個區域稱為「無效區域」或「更新區域」。正是顯示區域內無效區域的存在,才會讓Windows將一個WM_PAINT訊息放在應用程式的訊息佇列中。只有在顯示區域的某一部分失效時,視窗才會接受WM_PAINT訊息。
Windows內部為每個視窗保存一個「繪圖信息結構」,這個結構包含了包圍無效區域的最小矩形的坐標以及其它信息,這個矩形就叫做「無效矩形」,有時也稱為「無效區域」。如果在視窗訊息處理程式處理WM_PAINT訊息之前顯示區域中的另一個區域變為無效,則Windows計算出一個包圍兩個區域的新的無效區域(以及一個新的無效矩形),並將這種變化後的信息放在繪製信息結構中。Windows不會將多個WM_PAINT訊息都放在訊息佇列中。
視窗訊息處理程式可以通過呼叫InValidateRect使顯示區域內的矩形無效。如果訊息佇列中已經包含一個WM_PAINT訊息,Windows將計算出新的無效矩形。否則,它將一個新的WM_PAINT訊息放入訊息佇列中。在接收到WM_PAINT訊息時,視窗訊息處理程式可以取得無效矩形的坐標(我們馬上就會看到這一點)。通過呼叫GetUpdateRect,可以在任何時候取得這些坐標。
在處理WM_PAINT訊息處理期間,視窗訊息處理程式在呼叫了BeginPaint之後,整個顯示區域即變為有效。程式也可以通過呼叫ValidateRect函式使顯示區域內的任意矩形區域變為有效。如果這呼叫具有令整個無效區域變為有效的效果,則目前佇列中的任何WM_PAINT訊息都將被刪除。