nim_duilib/examples/multi_browser/taskbar/dwm_util.cpp
jiajia_deng 4933d1f2bc Remove dependency on shared
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-20 16:27:58 +08:00

94 lines
2.8 KiB
C++

#include "dwm_util.h"
HRESULT DwmSetIconicThumbnail(HWND hwnd, HBITMAP hbmp, DWORD dwSITFlags)
{
typedef HRESULT(WINAPI *LPSetProcessDPIAware)(HWND hwnd, HBITMAP hbmp, DWORD dwSITFlags);
static LPSetProcessDPIAware pDwmSetIconicThumbnail = NULL;
if (pDwmSetIconicThumbnail)
{
return pDwmSetIconicThumbnail(hwnd, hbmp, dwSITFlags);
}
else
{
HMODULE hModule = ::LoadLibrary(_T("dwmapi.dll"));
if (NULL != hModule) {
pDwmSetIconicThumbnail = (LPSetProcessDPIAware)GetProcAddress(hModule, "DwmSetIconicThumbnail");
if (pDwmSetIconicThumbnail) {
return pDwmSetIconicThumbnail(hwnd, hbmp, dwSITFlags);
}
::FreeLibrary(hModule);
}
}
return S_FALSE;
}
HRESULT DwmSetIconicLivePreviewBitmap(HWND hwnd, HBITMAP hbmp, POINT *pptClient, DWORD dwSITFlags)
{
typedef HRESULT(WINAPI *LPDwmSetIconicLivePreviewBitmap)(HWND hwnd, HBITMAP hbmp, POINT *pptClient, DWORD dwSITFlags);
static LPDwmSetIconicLivePreviewBitmap pDwmSetIconicLivePreviewBitmap = NULL;
if (pDwmSetIconicLivePreviewBitmap)
{
return pDwmSetIconicLivePreviewBitmap(hwnd, hbmp, pptClient, dwSITFlags);
}
else
{
HMODULE hModule = ::LoadLibrary(_T("dwmapi.dll"));
if (NULL != hModule) {
pDwmSetIconicLivePreviewBitmap = (LPDwmSetIconicLivePreviewBitmap)GetProcAddress(hModule, "DwmSetIconicLivePreviewBitmap");
if (pDwmSetIconicLivePreviewBitmap) {
return pDwmSetIconicLivePreviewBitmap(hwnd, hbmp, pptClient, dwSITFlags);
}
::FreeLibrary(hModule);
}
}
return S_FALSE;
}
HRESULT DwmInvalidateIconicBitmaps(HWND hwnd)
{
typedef HRESULT(WINAPI *LPDwmInvalidateIconicBitmaps)(HWND hwnd);
static LPDwmInvalidateIconicBitmaps pDwmInvalidateIconicBitmaps = NULL;
if (pDwmInvalidateIconicBitmaps)
{
return pDwmInvalidateIconicBitmaps(hwnd);
}
else
{
HMODULE hModule = ::LoadLibrary(_T("dwmapi.dll"));
if (NULL != hModule) {
pDwmInvalidateIconicBitmaps = (LPDwmInvalidateIconicBitmaps)GetProcAddress(hModule, "DwmInvalidateIconicBitmaps");
if (pDwmInvalidateIconicBitmaps) {
return pDwmInvalidateIconicBitmaps(hwnd);
}
::FreeLibrary(hModule);
}
}
return S_FALSE;
}
HRESULT DwmSetWindowAttribute(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute)
{
typedef HRESULT(WINAPI *LPDwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
static LPDwmSetWindowAttribute pDwmSetWindowAttribute = NULL;
if (pDwmSetWindowAttribute)
{
return pDwmSetWindowAttribute(hwnd, dwAttribute, pvAttribute, cbAttribute);
}
else
{
HMODULE hModule = ::LoadLibrary(_T("dwmapi.dll"));
if (NULL != hModule) {
pDwmSetWindowAttribute = (LPDwmSetWindowAttribute)GetProcAddress(hModule, "DwmSetWindowAttribute");
if (pDwmSetWindowAttribute) {
HRESULT hr = pDwmSetWindowAttribute(hwnd, dwAttribute, pvAttribute, cbAttribute);
return hr;
}
::FreeLibrary(hModule);
}
}
return S_FALSE;
}