不使用WM_PAINT消息进行绘图
尽管应用程序在处理 WM_PAINT 消息时执行大多数绘制操作,但有时应用程序直接在窗口中绘图更高效,而不依赖于 WM_PAINT 消息。 当用户需要即时反馈时(例如选择文本和拖动或调整对象大小时),这非常有用。 在这种情况下,应用程序通常在处理键盘或鼠标消息时进行绘制。
为了在不使用 WM_PAINT 消息的情况下在窗口中绘图,应用程序使用 GetDC 或 GetDCEx 函数检索窗口的显示设备上下文。 使用显示设备上下文时,应用程序可以在窗口中绘制并避免侵入其他窗口。 当应用程序完成绘图后,它会调用 ReleaseDC 函数来释放显示设备上下文以供其他应用程序使用。
在不使用 WM_PAINT 消息的情况下绘图时,应用程序通常不会使窗口失效。 相反,它以这样一种绘制方式,它可以轻松地还原窗口并删除绘图。 例如,当用户选择文本或对象时,应用程序通常通过反转窗口中已有的内容来绘制所选内容。 应用程序只需再次反转即可删除所选内容并还原窗口的原始内容。
应用程序负责仔细管理它对窗口所做的任何更改。 具体而言,如果应用程序绘制选定内容并发生中间 WM_PAINT 消息,则应用程序必须确保在消息期间完成的任何绘制都不会损坏所选内容。 为了避免这种情况,许多应用程序会删除所选内容,执行常规绘制操作,然后在绘图完成后还原所选内容。