ReactOS  0.4.15-dev-1177-g6cb3b62
appbar.c File Reference
#include <wine/config.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <windef.h>
#include <winbase.h>
#include <winerror.h>
#include <shellapi.h>
#include <winuser.h>
#include <shlobj.h>
#include <shlwapi.h>
#include "undocshell.h"
#include <wine/debug.h>
#include <wine/unicode.h>
Include dependency graph for appbar.c:

Go to the source code of this file.

Classes

struct  appbar_cmd
 
struct  appbar_response
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (appbar)
 
UINT_PTR WINAPI SHAppBarMessage (DWORD msg, PAPPBARDATA data)
 

Function Documentation

◆ SHAppBarMessage()

UINT_PTR WINAPI SHAppBarMessage ( DWORD  msg,
PAPPBARDATA  data 
)

Definition at line 64 of file appbar.c.

65 {
66  struct appbar_cmd command;
67  struct appbar_response* response;
68  HANDLE return_map;
69  LPVOID return_view;
70  HWND appbarmsg_window;
71  COPYDATASTRUCT cds;
72 
73  UINT_PTR ret = 0;
74 
75  TRACE("msg=%d, data={cb=%d, hwnd=%p}\n", msg, data->cbSize, data->hWnd);
76 
77  /* These members are message dependent */
78  switch(msg)
79  {
80  case ABM_NEW:
81  TRACE("callback: %x\n", data->uCallbackMessage);
82  break;
83 
84  case ABM_GETAUTOHIDEBAR:
85  TRACE("edge: %d\n", data->uEdge);
86  break;
87 
88  case ABM_QUERYPOS:
89  case ABM_SETPOS:
90  TRACE("edge: %d, rc: %s\n", data->uEdge, wine_dbgstr_rect(&data->rc));
91  break;
92 
93  case ABM_GETTASKBARPOS:
94  TRACE("rc: %s\n", wine_dbgstr_rect(&data->rc));
95  break;
96 
97  case ABM_SETAUTOHIDEBAR:
98  TRACE("edge: %d, lParam: %lx\n", data->uEdge, data->lParam);
99  break;
100 
101  default:
102  FIXME("unknown msg: %d\n", msg);
103  break;
104  }
105 
106  if (data->cbSize < sizeof(APPBARDATA))
107  {
108  WARN("data at %p is too small\n", data);
109  return FALSE;
110  }
111 
112  command.dwMsg = msg;
113  command.abd.hWnd = data->hWnd;
114  command.abd.uCallbackMessage = data->uCallbackMessage;
115  command.abd.uEdge = data->uEdge;
116  command.abd.rc = data->rc;
117  command.abd.lParam = data->lParam;
118 
119  return_map = CreateFileMappingW(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, sizeof(struct appbar_response), NULL);
120  if (return_map == NULL)
121  {
122  ERR("couldn't create file mapping\n");
123  return 0;
124  }
125  command.return_map = HandleToUlong( return_map );
126 
127  command.return_process = GetCurrentProcessId();
128 
129  appbarmsg_window = FindWindowW(L"Shell_TrayWnd", NULL);
130  if (appbarmsg_window == NULL)
131  {
132  ERR("couldn't find appbar window\n");
133  CloseHandle(return_map);
134  return 0;
135  }
136 
137  cds.dwData = TABDMC_APPBAR;
138  cds.cbData = sizeof(command);
139  cds.lpData = &command;
140 
141  SendMessageW(appbarmsg_window, WM_COPYDATA, (WPARAM)data->hWnd, (LPARAM)&cds);
142 
143  return_view = MapViewOfFile(return_map, FILE_MAP_READ, 0, 0, sizeof(struct appbar_response));
144  if (return_view == NULL)
145  {
146  ERR("MapViewOfFile failed\n");
147  CloseHandle(return_map);
148  return 0;
149  }
150 
151  response = return_view;
152 
153  ret = response->result;
154  if (ret)
155  {
156  data->hWnd = response->abd.hWnd;
157  data->uCallbackMessage = response->abd.uCallbackMessage;
158  data->uEdge = response->abd.uEdge;
159  data->rc = response->abd.rc;
160  data->lParam = response->abd.lParam;
161  }
162  UnmapViewOfFile(return_view);
163 
164  CloseHandle(return_map);
165 
166  return ret;
167 }
#define ABM_GETAUTOHIDEBAR
Definition: shellapi.h:66
#define CloseHandle
Definition: compat.h:487
#define MapViewOfFile
Definition: compat.h:493
#define WARN(fmt,...)
Definition: debug.h:112
#define HandleToUlong(h)
Definition: basetsd.h:79
#define INVALID_HANDLE_VALUE
Definition: compat.h:479
#define ABM_GETTASKBARPOS
Definition: shellapi.h:64
UINT_PTR WPARAM
Definition: windef.h:207
ULONG_PTR dwData
Definition: winuser.h:2976
#define FALSE
Definition: types.h:117
#define FIXME(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define FILE_MAP_READ
Definition: compat.h:524
struct _AppBarData abd
Definition: appbar.cpp:49
#define WM_COPYDATA
Definition: winuser.h:1646
#define TRACE(s)
Definition: solgame.cpp:4
HWND WINAPI FindWindowW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:492
const char * wine_dbgstr_rect(const RECT *rect)
#define ABM_NEW
Definition: shellapi.h:59
#define TABDMC_APPBAR
Definition: undocshell.h:710
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define ABM_SETAUTOHIDEBAR
Definition: shellapi.h:67
int ret
ULONGLONG result
Definition: appbar.cpp:48
static const WCHAR L[]
Definition: oid.c:1250
#define ERR(fmt,...)
Definition: debug.h:110
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int command(const char *fmt,...)
Definition: ftp.c:266
#define msg(x)
Definition: auth_time.c:54
#define ABM_QUERYPOS
Definition: shellapi.h:61
#define ABM_SETPOS
Definition: shellapi.h:62
#define UnmapViewOfFile
Definition: compat.h:494
DWORD WINAPI GetCurrentProcessId(VOID)
Definition: proc.c:1158
#define PAGE_READWRITE
Definition: nt_native.h:1304

Referenced by Window::AppBar_AutoHide(), Window::AppBar_NoAutoHide(), Window::AppBar_QueryPos(), Window::AppBar_QuerySetPos(), Window::AppBar_Register(), Window::AppBar_UnRegister(), DoAppBarStuff(), Window::OnActivate(), Window::OnWindowPosChanged(), test_appbarget(), test_setpos(), and testwindow_setpos().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( appbar  )