Winapi 将窗口渲染剪裁到区域

Winapi 将窗口渲染剪裁到区域,winapi,Winapi,我有一个100x100的窗口,但我只想画50x100,让右侧透明,而不使用WS_EX_LAYERED。启用自动隐藏后,Windows任务栏将显示此功能。根据GetWindowRect,任务栏的高度为40px,但只有2px可见。如果不将窗口设置为分层窗口,如何使窗口比屏幕上显示的窗口大?SetWindowRgn使窗口小于其GetWindowRectSetWindowRgn使窗口小于其GetWindowRect,您将看到任务栏有40个像素高,但其中38个像素不在屏幕上。如果您仔细观察,您将看到任务栏

我有一个100x100的窗口,但我只想画50x100,让右侧透明,而不使用WS_EX_LAYERED。启用自动隐藏后,Windows任务栏将显示此功能。根据GetWindowRect,任务栏的高度为40px,但只有2px可见。如果不将窗口设置为分层窗口,如何使窗口比屏幕上显示的窗口大?

SetWindowRgn
使窗口小于其
GetWindowRect
SetWindowRgn
使窗口小于其
GetWindowRect

,您将看到任务栏有40个像素高,但其中38个像素不在屏幕上。

如果您仔细观察,您将看到任务栏有40个像素高,但其中38个像素不在屏幕上。

Windows任务栏似乎没有使用SetWindowRgn,还有其他方法吗?使用此工具:,自动隐藏时,Windows任务栏似乎在“开始”按钮上使用SetWindowRgn,而不是任务栏。Windows任务栏似乎不使用SetWindowRgn,是否有其他方法?使用此工具:,自动隐藏时,Windows任务栏似乎在“开始”按钮上使用SetWindowRgn,但不是任务栏。这就是我要问的,在多显示器设置中,那些额外的38px在第二个屏幕上不可见。在这种情况下,有一个窗口区域。尝试:调用
GetWindowRgn
并查看它是否返回一个矩形,该矩形将剪切第二个监视器。在我的窗口上调用SetWindowRgn将强制禁用DWMWA\u NCRENDERING\u ENABLED,并且在删除区域之前,我无法重新启用它。有办法解决吗?没有。如果你应用一个区域,你会说“我想要非默认绘图”,窗口管理器会说“在这种情况下,我最好让你自己去做,不要试图通过在你不想要的地方绘制标题和东西来猜测你。”任务栏代码并没有做区域的事情来获得任何特殊效果。这只是一个避免溢出到另一个显示器的黑客。这就是我要问的,在多显示器设置中,那些额外的38px在第二个屏幕上不可见。在这种情况下,有一个窗口区域。尝试:调用
GetWindowRgn
并查看它是否返回一个矩形,该矩形将剪切第二个监视器。在我的窗口上调用SetWindowRgn将强制禁用DWMWA\u NCRENDERING\u ENABLED,并且在删除区域之前,我无法重新启用它。有办法解决吗?没有。如果你应用一个区域,你会说“我想要非默认绘图”,窗口管理器会说“在这种情况下,我最好让你自己去做,不要试图通过在你不想要的地方绘制标题和东西来猜测你。”任务栏代码并没有做区域的事情来获得任何特殊效果。这只是一个黑客,以避免溢出到另一个显示器。