该问题适用于所有Windows专家。
我正在对可能获得包括窗口非客户区域的设备上下文(DC)的不同方式进行一些研究(使用Windows API)
我知道两种方式:
GetWindowDC()-返回包括非客户区域在内的整个窗口的DC。
GetDCEx()-如果传递DCX_WINDOW
标志,则将获得非客户区的DC。
还有其他方法可以在非客户区域获得DC吗?
最佳答案
您正在使此过程变得更加复杂。实际上,只有一种方法来获取设备上下文以渲染窗口的非客户区:GetDCEx。
基本原理很简单:如果要渲染窗口的非客户区域,则可以通过WM_NCPAINT处理程序来实现。此消息带有更新区域(可能不是矩形),只有GetDCEx
可以为您设置非矩形的剪切区域。
当然,您可以通过在SelectClipRgn返回的设备上下文上手动调用GetWindowDC来实现相同的目的。但这就像通过在循环中重复添加一个值来实现乘法,而不是使用乘法运算符。
由于您尝试挂接控件之外的应用程序,因此可能还需要查找对GetDC和CreateDC的调用。任一人都可以返回整个屏幕的DC(包括窗口的可见非客户区域)。