/*! * 设置Aero绘图区 */ bool QtWin::extendFrameIntoClientArea(QWidget *widget, int left, int top, int right, int bottom) { Q_ASSERT(widget); Q_UNUSED(left); Q_UNUSED(top); Q_UNUSED(right); Q_UNUSED(bottom); bool result = false; #ifdef Q_WS_WIN if (resolveLibs()) { QLibrary dwmLib(QString::fromAscii("dwmapi")); HRESULT hr = S_OK; MARGINS m = {left, top, right, bottom}; hr = pDwmExtendFrameIntoClientArea(widget->winId(), &m); if (SUCCEEDED(hr)) { result = true; windowNotifier()->addWidget(widget); } widget->setAttribute(Qt::WA_TranslucentBackground, result); } #endif return result; }
static bool dwmResolveLibs() { if (!pDwmIsCompositionEnabled) { QLibrary dwmLib(QString::fromAscii("dwmapi")); pDwmIsCompositionEnabled = (PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled"); pDwmEnableBlurBehindWindow = (PtrDwmEnableBlurBehindWindow)dwmLib.resolve("DwmEnableBlurBehindWindow"); } return pDwmIsCompositionEnabled != 0; }
static bool resolveLibs() { if (!pDwmIsCompositionEnabled) { QLibrary dwmLib(QString::fromAscii("dwmapi")); pDwmIsCompositionEnabled =(PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled"); pDwmExtendFrameIntoClientArea = (PtrDwmExtendFrameIntoClientArea)dwmLib.resolve("DwmExtendFrameIntoClientArea"); pDwmenableAeroWindow = (PtrDwmenableAeroWindow)dwmLib.resolve("DwmenableAeroWindow"); pDwmGetColorizationColor = (PtrDwmGetColorizationColor)dwmLib.resolve("DwmGetColorizationColor"); } return pDwmIsCompositionEnabled != 0; }
/*! * 返回当前窗口颜色. */ QColor QtWin::colorizatinColor() { QColor resultColor = QApplication::palette().window().color(); #ifdef Q_WS_WIN if (resolveLibs()) { DWORD color = 0; BOOL opaque = FALSE; QLibrary dwmLib(QString::fromAscii("dwmapi")); HRESULT hr = S_OK; hr = pDwmGetColorizationColor(&color, &opaque); if (SUCCEEDED(hr)) resultColor = QColor(color); } #endif return resultColor; }
bool QVistaHelper::resolveSymbols() { static bool tried = false; if (!tried) { tried = true; QSystemLibrary dwmLib(L"dwmapi"); pDwmIsCompositionEnabled = (PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled"); if (pDwmIsCompositionEnabled) { pDwmDefWindowProc = (PtrDwmDefWindowProc)dwmLib.resolve("DwmDefWindowProc"); pDwmExtendFrameIntoClientArea = (PtrDwmExtendFrameIntoClientArea)dwmLib.resolve("DwmExtendFrameIntoClientArea"); } QSystemLibrary themeLib(L"uxtheme"); pIsAppThemed = (PtrIsAppThemed)themeLib.resolve("IsAppThemed"); if (pIsAppThemed) { pDrawThemeBackground = (PtrDrawThemeBackground)themeLib.resolve("DrawThemeBackground"); pGetThemePartSize = (PtrGetThemePartSize)themeLib.resolve("GetThemePartSize"); pGetThemeColor = (PtrGetThemeColor)themeLib.resolve("GetThemeColor"); pIsThemeActive = (PtrIsThemeActive)themeLib.resolve("IsThemeActive"); pOpenThemeData = (PtrOpenThemeData)themeLib.resolve("OpenThemeData"); pCloseThemeData = (PtrCloseThemeData)themeLib.resolve("CloseThemeData"); pGetThemeSysFont = (PtrGetThemeSysFont)themeLib.resolve("GetThemeSysFont"); pDrawThemeTextEx = (PtrDrawThemeTextEx)themeLib.resolve("DrawThemeTextEx"); pSetWindowThemeAttribute = (PtrSetWindowThemeAttribute)themeLib.resolve("SetWindowThemeAttribute"); } } return ( pDwmIsCompositionEnabled != 0 && pDwmDefWindowProc != 0 && pDwmExtendFrameIntoClientArea != 0 && pIsAppThemed != 0 && pDrawThemeBackground != 0 && pGetThemePartSize != 0 && pGetThemeColor != 0 && pIsThemeActive != 0 && pOpenThemeData != 0 && pCloseThemeData != 0 && pGetThemeSysFont != 0 && pDrawThemeTextEx != 0 && pSetWindowThemeAttribute != 0 ); }
bool Environment::isAeroOn(LogWriter *log) { try { DynamicLibrary dwmLib(_T("Dwmapi.dll")); DwmIsCompositionEnabled dwmIsEnabled = (DwmIsCompositionEnabled)dwmLib.getProcAddress("DwmIsCompositionEnabled"); if (dwmIsEnabled == 0) { throw Exception(_T("The DwmIsCompositionEnabled() has not been found in the Dwmapi.dll")); } BOOL result = FALSE; HRESULT dwmIsEnabledResult = dwmIsEnabled(&result); if (dwmIsEnabledResult != S_OK) { StringStorage errMess; errMess.format(_T("The DwmIsCompositionEnabled() error code is %d"), (int)dwmIsEnabledResult); throw Exception(_T("")); } return result != FALSE; } catch (Exception &e) { log->error(_T("The DwmIsCompositionEnabled() function failed: %s"), e.getMessage()); throw; } }