我需要移植一些旧代码,这些代码在普通C中实现对接窗口到Vista及以上。当拖动停靠窗口时,旧代码通过执行以下操作将对接窗口的轮廓直接绘制到桌面DC:
hdc = GetDCEx(NULL, NULL, DCX_WINDOW|DCX_CACHE|DCX_LOCKWINDOWUPDATE);
...
PatBlt(hdc, left, top, width, height, PATINVERT);
...
ReleaseDC(NULL, hdc);
这仍然适用于Vista及以上,但它非常非常慢 - 可能是因为DWM必须将桌面的帧缓冲区复制到临时可变像素缓冲区中,进行绘制,然后将其复制回现在不可变的帧缓冲。这很慢。
因此,我想知道如何将此类代码移植到Vista及其中。在Vista中引入DWM时,不再推荐直接绘制到桌面DC的AFAIK,所以我想知道当用户拖动它时我应该如何绘制对接窗口的轮廓?最好的方法是什么?
我正在考虑滥用光标图像(或拖动图像或Win32提供的任何内容)来做我想要的但我不确定这是否真的是最好的方法。有什么想法吗?
谢谢!