我正在尝试创建一个窗口,WM_NCPAINT根据用户设置在具有Aero/Glass和自定义渲染帧(通过处理)之间切换.(Windows Vista).
DwmComposition已启用.我的应用程序提供了玻璃框架,但是一旦我切换设置以触发自定义WM_NCPAINT代码路径然后切换回使用DefWindowProc的WM_NCPAINT处理,原生框架现在永远停留在"Vista Basic"风格 - 它不再是半透明的标题按钮与普通的Aero/Glass按钮看起来不同.
我已经尝试了各种方法,从发送SWP_FRAMECHANGED到更改窗口样式,然后将其更改回来,隐藏它等等,但是一切都无济于事.似乎只要我处理WM_NCPAINT一个玻璃窗而不是推迟到DefWindowProc我的窗户就会永远"破碎".
我在MSDN上找到了一个C#/ WPF示例(代码点msdn dot microsoft dot com slash chrome),似乎表明只需要停止处理WM_NCPAINT并且玻璃会返回,但这似乎不适用于我自己的应用程序.
有没有办法干净地重置这个状态?我的代码是用C++编写的,住在这里:
http://bengoodger.dreamhosters.com/software/chrome/dwm/
#include <windows.h>
#include <dwmapi.h>
static const wchar_t* kWindowClass = L"BrokenGlassWindow";
static const wchar_t* kWindowTitle =
L"BrokenGlass - Right click client area to toggle frame type.";
static const int kGlassBorderSize = 50;
static const int kNonGlassBorderSize = 40;
static bool g_glass = true;
bool IsGlass() {
BOOL composition_enabled = …Run Code Online (Sandbox Code Playgroud)