123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- // Copyright 2010-2012 The W32 Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // +build windows
- package w32
- import (
- "fmt"
- "syscall"
- "unsafe"
- )
- // DEFINED IN THE DWM API BUT NOT IMPLEMENTED BY MS:
- // DwmAttachMilContent
- // DwmDetachMilContent
- // DwmEnableComposition
- // DwmGetGraphicsStreamClient
- // DwmGetGraphicsStreamTransformHint
- var (
- moddwmapi = syscall.NewLazyDLL("dwmapi.dll")
- procDwmDefWindowProc = moddwmapi.NewProc("DwmDefWindowProc")
- procDwmEnableBlurBehindWindow = moddwmapi.NewProc("DwmEnableBlurBehindWindow")
- procDwmEnableMMCSS = moddwmapi.NewProc("DwmEnableMMCSS")
- procDwmExtendFrameIntoClientArea = moddwmapi.NewProc("DwmExtendFrameIntoClientArea")
- procDwmFlush = moddwmapi.NewProc("DwmFlush")
- procDwmGetColorizationColor = moddwmapi.NewProc("DwmGetColorizationColor")
- procDwmGetCompositionTimingInfo = moddwmapi.NewProc("DwmGetCompositionTimingInfo")
- procDwmGetTransportAttributes = moddwmapi.NewProc("DwmGetTransportAttributes")
- procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute")
- procDwmInvalidateIconicBitmaps = moddwmapi.NewProc("DwmInvalidateIconicBitmaps")
- procDwmIsCompositionEnabled = moddwmapi.NewProc("DwmIsCompositionEnabled")
- procDwmModifyPreviousDxFrameDuration = moddwmapi.NewProc("DwmModifyPreviousDxFrameDuration")
- procDwmQueryThumbnailSourceSize = moddwmapi.NewProc("DwmQueryThumbnailSourceSize")
- procDwmRegisterThumbnail = moddwmapi.NewProc("DwmRegisterThumbnail")
- procDwmRenderGesture = moddwmapi.NewProc("DwmRenderGesture")
- procDwmSetDxFrameDuration = moddwmapi.NewProc("DwmSetDxFrameDuration")
- procDwmSetIconicLivePreviewBitmap = moddwmapi.NewProc("DwmSetIconicLivePreviewBitmap")
- procDwmSetIconicThumbnail = moddwmapi.NewProc("DwmSetIconicThumbnail")
- procDwmSetPresentParameters = moddwmapi.NewProc("DwmSetPresentParameters")
- procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute")
- procDwmShowContact = moddwmapi.NewProc("DwmShowContact")
- procDwmTetherContact = moddwmapi.NewProc("DwmTetherContact")
- procDwmTransitionOwnedWindow = moddwmapi.NewProc("DwmTransitionOwnedWindow")
- procDwmUnregisterThumbnail = moddwmapi.NewProc("DwmUnregisterThumbnail")
- procDwmUpdateThumbnailProperties = moddwmapi.NewProc("DwmUpdateThumbnailProperties")
- )
- func DwmDefWindowProc(hWnd HWND, msg uint, wParam, lParam uintptr) (bool, uint) {
- var result uint
- ret, _, _ := procDwmDefWindowProc.Call(
- uintptr(hWnd),
- uintptr(msg),
- wParam,
- lParam,
- uintptr(unsafe.Pointer(&result)))
- return ret != 0, result
- }
- func DwmEnableBlurBehindWindow(hWnd HWND, pBlurBehind *DWM_BLURBEHIND) HRESULT {
- ret, _, _ := procDwmEnableBlurBehindWindow.Call(
- uintptr(hWnd),
- uintptr(unsafe.Pointer(pBlurBehind)))
- return HRESULT(ret)
- }
- func DwmEnableMMCSS(fEnableMMCSS bool) HRESULT {
- ret, _, _ := procDwmEnableMMCSS.Call(
- uintptr(BoolToBOOL(fEnableMMCSS)))
- return HRESULT(ret)
- }
- func DwmExtendFrameIntoClientArea(hWnd HWND, pMarInset *MARGINS) HRESULT {
- ret, _, _ := procDwmExtendFrameIntoClientArea.Call(
- uintptr(hWnd),
- uintptr(unsafe.Pointer(pMarInset)))
- return HRESULT(ret)
- }
- func DwmFlush() HRESULT {
- ret, _, _ := procDwmFlush.Call()
- return HRESULT(ret)
- }
- func DwmGetColorizationColor(pcrColorization *uint32, pfOpaqueBlend *BOOL) HRESULT {
- ret, _, _ := procDwmGetColorizationColor.Call(
- uintptr(unsafe.Pointer(pcrColorization)),
- uintptr(unsafe.Pointer(pfOpaqueBlend)))
- return HRESULT(ret)
- }
- func DwmGetCompositionTimingInfo(hWnd HWND, pTimingInfo *DWM_TIMING_INFO) HRESULT {
- ret, _, _ := procDwmGetCompositionTimingInfo.Call(
- uintptr(hWnd),
- uintptr(unsafe.Pointer(pTimingInfo)))
- return HRESULT(ret)
- }
- func DwmGetTransportAttributes(pfIsRemoting *BOOL, pfIsConnected *BOOL, pDwGeneration *uint32) HRESULT {
- ret, _, _ := procDwmGetTransportAttributes.Call(
- uintptr(unsafe.Pointer(pfIsRemoting)),
- uintptr(unsafe.Pointer(pfIsConnected)),
- uintptr(unsafe.Pointer(pDwGeneration)))
- return HRESULT(ret)
- }
- // TODO: verify handling of variable arguments
- func DwmGetWindowAttribute(hWnd HWND, dwAttribute uint32) (pAttribute interface{}, result HRESULT) {
- var pvAttribute, pvAttrSize uintptr
- switch dwAttribute {
- case DWMWA_NCRENDERING_ENABLED:
- v := new(BOOL)
- pAttribute = v
- pvAttribute = uintptr(unsafe.Pointer(v))
- pvAttrSize = unsafe.Sizeof(*v)
- case DWMWA_CAPTION_BUTTON_BOUNDS, DWMWA_EXTENDED_FRAME_BOUNDS:
- v := new(RECT)
- pAttribute = v
- pvAttribute = uintptr(unsafe.Pointer(v))
- pvAttrSize = unsafe.Sizeof(*v)
- case DWMWA_CLOAKED:
- panic(fmt.Sprintf("DwmGetWindowAttribute(%d) is not currently supported.", dwAttribute))
- default:
- panic(fmt.Sprintf("DwmGetWindowAttribute(%d) is not valid.", dwAttribute))
- }
- ret, _, _ := procDwmGetWindowAttribute.Call(
- uintptr(hWnd),
- uintptr(dwAttribute),
- pvAttribute,
- pvAttrSize)
- result = HRESULT(ret)
- return
- }
- func DwmInvalidateIconicBitmaps(hWnd HWND) HRESULT {
- ret, _, _ := procDwmInvalidateIconicBitmaps.Call(
- uintptr(hWnd))
- return HRESULT(ret)
- }
- func DwmIsCompositionEnabled(pfEnabled *BOOL) HRESULT {
- ret, _, _ := procDwmIsCompositionEnabled.Call(
- uintptr(unsafe.Pointer(pfEnabled)))
- return HRESULT(ret)
- }
- func DwmModifyPreviousDxFrameDuration(hWnd HWND, cRefreshes int, fRelative bool) HRESULT {
- ret, _, _ := procDwmModifyPreviousDxFrameDuration.Call(
- uintptr(hWnd),
- uintptr(cRefreshes),
- uintptr(BoolToBOOL(fRelative)))
- return HRESULT(ret)
- }
- func DwmQueryThumbnailSourceSize(hThumbnail HTHUMBNAIL, pSize *SIZE) HRESULT {
- ret, _, _ := procDwmQueryThumbnailSourceSize.Call(
- uintptr(hThumbnail),
- uintptr(unsafe.Pointer(pSize)))
- return HRESULT(ret)
- }
- func DwmRegisterThumbnail(hWndDestination HWND, hWndSource HWND, phThumbnailId *HTHUMBNAIL) HRESULT {
- ret, _, _ := procDwmRegisterThumbnail.Call(
- uintptr(hWndDestination),
- uintptr(hWndSource),
- uintptr(unsafe.Pointer(phThumbnailId)))
- return HRESULT(ret)
- }
- func DwmRenderGesture(gt GESTURE_TYPE, cContacts uint, pdwPointerID *uint32, pPoints *POINT) {
- procDwmRenderGesture.Call(
- uintptr(gt),
- uintptr(cContacts),
- uintptr(unsafe.Pointer(pdwPointerID)),
- uintptr(unsafe.Pointer(pPoints)))
- return
- }
- func DwmSetDxFrameDuration(hWnd HWND, cRefreshes int) HRESULT {
- ret, _, _ := procDwmSetDxFrameDuration.Call(
- uintptr(hWnd),
- uintptr(cRefreshes))
- return HRESULT(ret)
- }
- func DwmSetIconicLivePreviewBitmap(hWnd HWND, hbmp HBITMAP, pptClient *POINT, dwSITFlags uint32) HRESULT {
- ret, _, _ := procDwmSetIconicLivePreviewBitmap.Call(
- uintptr(hWnd),
- uintptr(hbmp),
- uintptr(unsafe.Pointer(pptClient)),
- uintptr(dwSITFlags))
- return HRESULT(ret)
- }
- func DwmSetIconicThumbnail(hWnd HWND, hbmp HBITMAP, dwSITFlags uint32) HRESULT {
- ret, _, _ := procDwmSetIconicThumbnail.Call(
- uintptr(hWnd),
- uintptr(hbmp),
- uintptr(dwSITFlags))
- return HRESULT(ret)
- }
- func DwmSetPresentParameters(hWnd HWND, pPresentParams *DWM_PRESENT_PARAMETERS) HRESULT {
- ret, _, _ := procDwmSetPresentParameters.Call(
- uintptr(hWnd),
- uintptr(unsafe.Pointer(pPresentParams)))
- return HRESULT(ret)
- }
- func DwmSetWindowAttribute(hWnd HWND, dwAttribute uint32, pvAttribute LPCVOID, cbAttribute uint32) HRESULT {
- ret, _, _ := procDwmSetWindowAttribute.Call(
- uintptr(hWnd),
- uintptr(dwAttribute),
- uintptr(pvAttribute),
- uintptr(cbAttribute))
- return HRESULT(ret)
- }
- func DwmShowContact(dwPointerID uint32, eShowContact DWM_SHOWCONTACT) {
- procDwmShowContact.Call(
- uintptr(dwPointerID),
- uintptr(eShowContact))
- return
- }
- func DwmTetherContact(dwPointerID uint32, fEnable bool, ptTether POINT) {
- procDwmTetherContact.Call(
- uintptr(dwPointerID),
- uintptr(BoolToBOOL(fEnable)),
- uintptr(unsafe.Pointer(&ptTether)))
- return
- }
- func DwmTransitionOwnedWindow(hWnd HWND, target DWMTRANSITION_OWNEDWINDOW_TARGET) {
- procDwmTransitionOwnedWindow.Call(
- uintptr(hWnd),
- uintptr(target))
- return
- }
- func DwmUnregisterThumbnail(hThumbnailId HTHUMBNAIL) HRESULT {
- ret, _, _ := procDwmUnregisterThumbnail.Call(
- uintptr(hThumbnailId))
- return HRESULT(ret)
- }
- func DwmUpdateThumbnailProperties(hThumbnailId HTHUMBNAIL, ptnProperties *DWM_THUMBNAIL_PROPERTIES) HRESULT {
- ret, _, _ := procDwmUpdateThumbnailProperties.Call(
- uintptr(hThumbnailId),
- uintptr(unsafe.Pointer(ptnProperties)))
- return HRESULT(ret)
- }
|