include/mscvpdb.h: Use flexible array members for the rest of structures.
[wine.git] / dlls / dwmapi / dwmapi_main.c
blobadc02552ba72944a59eb8799eab087fdbc73b5e1
1 /*
2 * Dwmapi
4 * Copyright 2007 Andras Kovacs
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <stdarg.h>
24 #include "winternl.h"
25 #define COBJMACROS
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wingdi.h"
29 #include "winuser.h"
30 #include "dwmapi.h"
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(dwmapi);
36 /**********************************************************************
37 * DwmIsCompositionEnabled (DWMAPI.@)
39 HRESULT WINAPI DwmIsCompositionEnabled(BOOL *enabled)
41 RTL_OSVERSIONINFOEXW version;
43 TRACE("%p\n", enabled);
45 if (!enabled)
46 return E_INVALIDARG;
48 *enabled = FALSE;
49 version.dwOSVersionInfoSize = sizeof(version);
50 if (!RtlGetVersion(&version))
51 *enabled = (version.dwMajorVersion > 6 || (version.dwMajorVersion == 6 && version.dwMinorVersion >= 3));
53 return S_OK;
56 /**********************************************************************
57 * DwmEnableComposition (DWMAPI.102)
59 HRESULT WINAPI DwmEnableComposition(UINT uCompositionAction)
61 FIXME("(%d) stub\n", uCompositionAction);
63 return S_OK;
66 /**********************************************************************
67 * DwmExtendFrameIntoClientArea (DWMAPI.@)
69 HRESULT WINAPI DwmExtendFrameIntoClientArea(HWND hwnd, const MARGINS* margins)
71 FIXME("(%p, %p) stub\n", hwnd, margins);
73 return S_OK;
76 /**********************************************************************
77 * DwmGetColorizationColor (DWMAPI.@)
79 HRESULT WINAPI DwmGetColorizationColor(DWORD *colorization, BOOL *opaque_blend)
81 FIXME("(%p, %p) stub\n", colorization, opaque_blend);
83 return E_NOTIMPL;
86 /**********************************************************************
87 * DwmFlush (DWMAPI.@)
89 HRESULT WINAPI DwmFlush(void)
91 static BOOL once;
93 if (!once++) FIXME("() stub\n");
95 return S_OK;
98 /**********************************************************************
99 * DwmInvalidateIconicBitmaps (DWMAPI.@)
101 HRESULT WINAPI DwmInvalidateIconicBitmaps(HWND hwnd)
103 static BOOL once;
105 if (!once++) FIXME("(%p) stub\n", hwnd);
107 return E_NOTIMPL;
110 /**********************************************************************
111 * DwmSetWindowAttribute (DWMAPI.@)
113 HRESULT WINAPI DwmSetWindowAttribute(HWND hwnd, DWORD attributenum, LPCVOID attribute, DWORD size)
115 static BOOL once;
117 if (!once++) FIXME("(%p, %lx, %p, %lx) stub\n", hwnd, attributenum, attribute, size);
119 return S_OK;
122 /**********************************************************************
123 * DwmGetGraphicsStreamClient (DWMAPI.@)
125 HRESULT WINAPI DwmGetGraphicsStreamClient(UINT uIndex, UUID *pClientUuid)
127 FIXME("(%d, %p) stub\n", uIndex, pClientUuid);
129 return E_NOTIMPL;
132 /**********************************************************************
133 * DwmGetTransportAttributes (DWMAPI.@)
135 HRESULT WINAPI DwmGetTransportAttributes(BOOL *pfIsRemoting, BOOL *pfIsConnected, DWORD *pDwGeneration)
137 FIXME("(%p, %p, %p) stub\n", pfIsRemoting, pfIsConnected, pDwGeneration);
139 return DWM_E_COMPOSITIONDISABLED;
142 /**********************************************************************
143 * DwmUnregisterThumbnail (DWMAPI.@)
145 HRESULT WINAPI DwmUnregisterThumbnail(HTHUMBNAIL thumbnail)
147 FIXME("(%p) stub\n", thumbnail);
149 return E_NOTIMPL;
152 /**********************************************************************
153 * DwmEnableMMCSS (DWMAPI.@)
155 HRESULT WINAPI DwmEnableMMCSS(BOOL enableMMCSS)
157 FIXME("(%d) stub\n", enableMMCSS);
159 return S_OK;
162 /**********************************************************************
163 * DwmGetGraphicsStreamTransformHint (DWMAPI.@)
165 HRESULT WINAPI DwmGetGraphicsStreamTransformHint(UINT uIndex, MilMatrix3x2D *pTransform)
167 FIXME("(%d, %p) stub\n", uIndex, pTransform);
169 return E_NOTIMPL;
172 /**********************************************************************
173 * DwmEnableBlurBehindWindow (DWMAPI.@)
175 HRESULT WINAPI DwmEnableBlurBehindWindow(HWND hWnd, const DWM_BLURBEHIND *pBlurBuf)
177 FIXME("%p %p\n", hWnd, pBlurBuf);
179 return E_NOTIMPL;
182 /**********************************************************************
183 * DwmDefWindowProc (DWMAPI.@)
185 BOOL WINAPI DwmDefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
187 static int i;
189 if (!i++) FIXME("stub\n");
191 return FALSE;
194 /**********************************************************************
195 * DwmGetWindowAttribute (DWMAPI.@)
197 HRESULT WINAPI DwmGetWindowAttribute(HWND hwnd, DWORD attribute, PVOID pv_attribute, DWORD size)
199 BOOL enabled = FALSE;
200 HRESULT hr;
202 TRACE("(%p %ld %p %ld)\n", hwnd, attribute, pv_attribute, size);
204 if (DwmIsCompositionEnabled(&enabled) == S_OK && !enabled)
205 return E_HANDLE;
206 if (!IsWindow(hwnd))
207 return E_HANDLE;
209 switch (attribute) {
210 case DWMWA_EXTENDED_FRAME_BOUNDS:
212 RECT *rect = (RECT *)pv_attribute;
213 DPI_AWARENESS_CONTEXT context;
215 if (!rect)
216 return E_INVALIDARG;
217 if (size < sizeof(*rect))
218 return E_NOT_SUFFICIENT_BUFFER;
219 if (GetWindowLongW(hwnd, GWL_STYLE) & WS_CHILD)
220 return E_HANDLE;
222 /* DWM frame bounds are always in physical coords */
223 context = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
224 if (GetWindowRect(hwnd, rect))
225 hr = S_OK;
226 else
227 hr = HRESULT_FROM_WIN32(GetLastError());
229 SetThreadDpiAwarenessContext(context);
230 break;
232 default:
233 FIXME("attribute %ld not implemented.\n", attribute);
234 hr = E_NOTIMPL;
235 break;
238 return hr;
241 /**********************************************************************
242 * DwmRegisterThumbnail (DWMAPI.@)
244 HRESULT WINAPI DwmRegisterThumbnail(HWND dest, HWND src, PHTHUMBNAIL thumbnail_id)
246 FIXME("(%p %p %p) stub\n", dest, src, thumbnail_id);
248 return E_NOTIMPL;
251 static int get_display_frequency(void)
253 DEVMODEW mode;
254 BOOL ret;
256 memset(&mode, 0, sizeof(mode));
257 mode.dmSize = sizeof(mode);
258 ret = EnumDisplaySettingsExW(NULL, ENUM_CURRENT_SETTINGS, &mode, 0);
259 if (ret && mode.dmFields & DM_DISPLAYFREQUENCY && mode.dmDisplayFrequency)
261 return mode.dmDisplayFrequency;
263 else
265 WARN("Failed to query display frequency, returning a fallback value.\n");
266 return 60;
270 /**********************************************************************
271 * DwmGetCompositionTimingInfo (DWMAPI.@)
273 HRESULT WINAPI DwmGetCompositionTimingInfo(HWND hwnd, DWM_TIMING_INFO *info)
275 LARGE_INTEGER performance_frequency, qpc;
276 static int i, display_frequency;
278 if (!info)
279 return E_INVALIDARG;
281 if (info->cbSize != sizeof(DWM_TIMING_INFO))
282 return MILERR_MISMATCHED_SIZE;
284 if(!i++) FIXME("(%p %p)\n", hwnd, info);
286 memset(info, 0, info->cbSize);
287 info->cbSize = sizeof(DWM_TIMING_INFO);
289 display_frequency = get_display_frequency();
290 info->rateRefresh.uiNumerator = display_frequency;
291 info->rateRefresh.uiDenominator = 1;
292 info->rateCompose.uiNumerator = display_frequency;
293 info->rateCompose.uiDenominator = 1;
295 QueryPerformanceFrequency(&performance_frequency);
296 info->qpcRefreshPeriod = performance_frequency.QuadPart / display_frequency;
298 QueryPerformanceCounter(&qpc);
299 info->qpcVBlank = (qpc.QuadPart / info->qpcRefreshPeriod) * info->qpcRefreshPeriod;
301 return S_OK;
304 /**********************************************************************
305 * DwmAttachMilContent (DWMAPI.@)
307 HRESULT WINAPI DwmAttachMilContent(HWND hwnd)
309 FIXME("(%p) stub\n", hwnd);
310 return E_NOTIMPL;
313 /**********************************************************************
314 * DwmDetachMilContent (DWMAPI.@)
316 HRESULT WINAPI DwmDetachMilContent(HWND hwnd)
318 FIXME("(%p) stub\n", hwnd);
319 return E_NOTIMPL;
322 /**********************************************************************
323 * DwmUpdateThumbnailProperties (DWMAPI.@)
325 HRESULT WINAPI DwmUpdateThumbnailProperties(HTHUMBNAIL thumbnail, const DWM_THUMBNAIL_PROPERTIES *props)
327 FIXME("(%p, %p) stub\n", thumbnail, props);
328 return E_NOTIMPL;
331 /**********************************************************************
332 * DwmSetPresentParameters (DWMAPI.@)
334 HRESULT WINAPI DwmSetPresentParameters(HWND hwnd, DWM_PRESENT_PARAMETERS *params)
336 FIXME("(%p %p) stub\n", hwnd, params);
337 return S_OK;
340 /**********************************************************************
341 * DwmSetIconicLivePreviewBitmap (DWMAPI.@)
343 HRESULT WINAPI DwmSetIconicLivePreviewBitmap(HWND hwnd, HBITMAP hbmp, POINT *pos, DWORD flags)
345 FIXME("(%p %p %p %lx) stub\n", hwnd, hbmp, pos, flags);
346 return S_OK;
349 /**********************************************************************
350 * DwmSetIconicThumbnail (DWMAPI.@)
352 HRESULT WINAPI DwmSetIconicThumbnail(HWND hwnd, HBITMAP hbmp, DWORD flags)
354 FIXME("(%p %p %lx) stub\n", hwnd, hbmp, flags);
355 return S_OK;
358 /**********************************************************************
359 * DwmpGetColorizationParameters (DWMAPI.@)
361 HRESULT WINAPI DwmpGetColorizationParameters(void *params)
363 FIXME("(%p) stub\n", params);
364 return E_NOTIMPL;