不带WM_PAINT消息的绘图

尽管应用程序在 处理WM_PAINT 消息时执行大多数绘图操作,但有时应用程序无需依赖 WM_PAINT 消息即可直接在窗口中绘制。 当用户需要即时反馈(例如选择文本和拖动或调整对象大小)时,这非常有用。 在这种情况下,应用程序通常在处理键盘或鼠标消息时绘制。

若要在不使用WM_PAINT消息的情况下在窗口中绘制,应用程序使用 GetDC 或 GetDCEx 函数检索窗口的显示设备上下文。 使用显示设备上下文,应用程序可以在窗口中绘制,避免入侵其他窗口。 应用程序完成绘图后,它会调用 ReleaseDC 函数来释放显示设备上下文以供其他应用程序使用。

在没有使用 WM_PAINT 消息的情况下绘制时,应用程序通常不会使窗口失效。 相反,它以这样一种方式绘制,它可以轻松还原窗口并删除绘图。 例如,当用户选择文本或对象时,应用程序通常会通过反转窗口中已有的任何内容来绘制选择。 应用程序可以通过再次反转来删除所选内容并还原窗口的原始内容。

应用程序负责仔细管理对窗口所做的任何更改。 特别是,如果应用程序绘制选定内容并发生干预 WM_PAINT 消息,则应用程序必须确保在消息期间完成的任何绘图不会损坏所选内容。 为了避免这种情况,许多应用程序会删除所选内容,执行常规绘图操作,然后在绘图完成后还原所选内容。