C++ 在窗口区域上使用UpdateLayeredWindow

C++ 在窗口区域上使用UpdateLayeredWindow,c++,windows,winapi,C++,Windows,Winapi,我正在使用UpdateLayeredWindow创建一个分层窗口,并为子控件实现了绘图逻辑。我的问题是,每当uI发生更改时,整个框架都需要重新绘制。我想知道是否有办法只重新绘制窗口的特定错误或CRgn(即,将相关的CDC传递到UpdateLayeredWindow,但指定要修改的错误) 使用UpdateLayeredWindowIndirect并将UPDATELAYEREDWINDOWINFO结构中的prcDirty CRect设置为控件的客户端区域是否会导致仅更新该区域?“UpdateLaye

我正在使用UpdateLayeredWindow创建一个分层窗口,并为子控件实现了绘图逻辑。我的问题是,每当uI发生更改时,整个框架都需要重新绘制。我想知道是否有办法只重新绘制窗口的特定错误或CRgn(即,将相关的CDC传递到UpdateLayeredWindow,但指定要修改的错误)

使用UpdateLayeredWindowIndirect并将UPDATELAYEREDWINDOWINFO结构中的prcDirty CRect设置为控件的客户端区域是否会导致仅更新该区域?

“UpdateLayeredWindow始终更新整个窗口。要更新窗口的一部分,请使用传统的WM_绘制并使用SetLayeredWindowAttributes设置混合值。” -


请阅读文档。请参见。

通过
psize
pptSrc
参数,您可以指定要更新的窗口部分。
UpdateLayeredWindow
不使用失效模型。它使用更新模型

使用UpdateLayeredWindowIndirect并将UPDATELAYEREDWINDOWINFO结构中的prcDirty CRect设置为控件的客户端区域是否会导致仅更新该区域


是的。这正是它所做的。

我需要UpdateLayeredWindow提供的每像素alpha混合功能。UpdateLayeredWindow间接功能如何?它说UPDATELAYEREDWINDOWINFO参数中的prcDirty RECT用于指定此值,是否正确?这在文档中有说明。“要更新的区域。”。此参数可以为NULL。如果非空,则仅从源DC更新此矩形中的区域。“它限制了更新区域。我知道文档中说了什么,我只是想进行某种验证,证明这实际上是有效的,并产生了所需的效果。目前还不清楚您试图获得什么效果。你谈论失效和更新,就好像它们是一样的。您可以控制更新区域(操作会更改哪些像素)。您无法控制无效区域(更新后屏幕上的像素将被刷新)。但是你没有理由关心无效区域,因为你没有画。如果你想评估性能,那么只有一种方法可以确定:两种方法都试一下,然后比较。