所以记住this answer ?事实证明,如果我单击应用了此代码的选项卡控件的按钮,整个窗口会空白,直到我将鼠标悬停在上面。我确定这是因为未设置传递给 WM_CTLCOLORxxx
消息的设备上下文的剪辑区域:
(results from windows 7 64-bit)
on a normal redraw
window rect 435 301 591 324
client rect 4 96 160 119
clip rect 4 96 230 119
after clicking a button
window rect 435 301 591 324
client rect 4 96 160 119
clip rect 0 0 320 240 (this is the top level window's client rect)
所以现在我想暂时将 DC 剪辑到按钮的客户端矩形。我不想只调用 IntersectClipRect()
以防 Windows 的内部工作(或其他完全)通过不同的 cilp 矩形,所以我宁愿保存剪辑矩形并恢复它。我的问题是这样做的最佳方式是什么。
是 SaveDC()
吗?
i = SaveDC(dc);
IntersectClipRect(dc, r.left, r.top, r.right, r.bottom);
// ...
RestoreDC(dc, i);
MSDN 的文档没有将剪辑列为使用 SaveDC()
保存的内容之一。
是 GetClipRgn()
和 SelectClipRgn()
吗?
rgn = CreateRectRegion(0, 0, 0, 0); // see also https://stackoverflow.com/questions/3478180/correct-usage-of-getcliprgn
GetClipRgn(dc, rgn);
IntersectClipRect(dc, r.left, r.top, r.right, r.bottom);
// ...
SelectClipRgn(dc, rgn);
我不确定这是否真的会完全替换现有的裁剪区域,或者只是做另一个相交。
还是别的什么?
谢谢。
最佳答案
SaveDC()
/RestoreDC()
包含剪辑区域。
关于c - 保存 DC 的剪辑区域并在以后恢复它的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592510/