Ich schreibe eine Bibliothek, die eine Farbe im Fenster Client-Bereich unsichtbar macht.SetLayeredWindowAttributes funktioniert nicht unter Windows 8+ (C++)
In der Anwendungshälfte, zuerst rufe ich window_fix_transparent_color() auf, um das Fenster zu überlagern. Dann verwende ich window_set_transparent_color(), um eine Farbe im Client-Bereich unsichtbar zu machen.
Hier ist meine Bibliothek Code:
#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);
}
}
ich die Version von MinGW bin mit, die mit dem neuesten Code verpackt :: Blocks als mein Compiler. Es funktioniert unter Windows 7, aber nicht unter Windows 8, 8.1 oder 10 ...
Irgendwelche Ideen, warum das ist? Außerdem, eine merkwürdige Sache, die es wert ist, daran zu erinnern - sie arbeitete früher unter Windows 8/8.1/10, was mich zu der Annahme verleitet, dass ein bestimmtes Windows-Update für diese Plattformen meinen Code beschädigt haben könnte. Ich habe keine Änderungen an meinem Code vorgenommen, seit er auf den Plattformen nach Windows 7 nicht mehr funktioniert.
Vielen Dank!
Eine GUI-Bibliothek wie Winforms führt [diesen Code] (https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Control.cs,2895b1373643ef53) wenn die Opazität eines Formulars oder Die Eigenschaft TransparencyKey wurde geändert. Beachten Sie den Aufruf von SetWindowPos(). –
@HansPassant Ich bin mir nicht sicher, ob ich verstehe, was dein Standpunkt ist. –
Sie haben die Frage mit C++ markiert und dann den ganzen Code in extern "C" eingefügt, eher seltsam, wenn Sie mich fragen ... – Anders