我正在编写一个库,使窗口客户区域中的颜色不可见。SetLayeredWindowAttributes无法在Windows 8 +(C++)上工作
在应用程序的一半中,首先调用window_fix_transparent_color()使窗口分层。然后我使用window_set_transparent_color()使客户区域中的颜色不可见。
这里是我的库代码:
#define _WIN32_WINNT 0x0501
#include <windows.h>
extern "C"
{
void window_fix_transparent_color(double window_handle)
{
// sets the window flags to support RGB color transparency.
SetWindowLong((HWND)(DWORD)window_handle,GWL_EXSTYLE,
GetWindowLong((HWND)(DWORD)window_handle,GWL_EXSTYLE)|WS_EX_LAYERED);
}
void window_set_transparent_color(double window_handle,double red,double green,double blue)
{
// sets the RGB color to be transparent for the specified window.
SetLayeredWindowAttributes((HWND)(DWORD)window_handle,RGB(red,green,blue),255,LWA_COLORKEY);
}
}
我使用的包装用最新的代码MinGW的版本::块作为我的编译器。它适用于Windows 7,但不适用于Windows 8,8.1或10 ...
任何想法,为什么这是什么?此外,值得注意的一个奇怪的事情 - 它曾经在Windows 8/8.1/10上工作,这导致我相信这些平台的某个Windows更新可能会破坏我的代码。自从在Windows 7平台上停止工作以来,我没有对代码进行任何更改。
谢谢!
像Winforms这样的GUI库在窗体的不透明度或者窗体的不透明度时执行[this code](https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Control.cs,2895b1373643ef53) TransparencyKey属性已更改。请注意对SetWindowPos()的调用。 –
@HansPassant我不确定我明白你的意思。 –
你用C++标记了这个问题,然后把所有的代码放在extern“C”中,如果你问我的话很奇怪... – Anders