该问题适用于所有Windows专家。

我正在对可能获得包括窗口非客户区域的设备上下文(DC)的不同方式进行一些研究(使用Windows API)

我知道两种方式:


GetWindowDC()-返回包括非客户区域在内的整个窗口的DC。
GetDCEx()-如果传递DCX_WINDOW标志,则将获得非客户区的DC。


还有其他方法可以在非客户区域获得DC吗?

最佳答案

您正在使此过程变得更加复杂。实际上,只有一种方法来获取设备上下文以渲染窗口的非客户区:GetDCEx

基本原理很简单:如果要渲染窗口的非客户区域,则可以通过WM_NCPAINT处理程序来实现。此消息带有更新区域(可能不是矩形),只有GetDCEx可以为您设置非矩形的剪切区域。


当然,您可以通过在SelectClipRgn返回的设备上下文上手动调用GetWindowDC来实现相同的目的。但这就像通过在循环中重复添加一个值来实现乘法,而不是使用乘法运算符。


由于您尝试挂接控件之外的应用程序,因此可能还需要查找对GetDCCreateDC的调用。任一人都可以返回整个屏幕的DC(包括窗口的可见非客户区域)。

09-05 22:49