ReactOS 0.4.15-dev-7674-gc0b4db1
syslink.c File Reference
#include <windows.h>
#include <commctrl.h>
#include "wine/test.h"
#include "v6util.h"
#include "msg.h"
Include dependency graph for syslink.c:

Go to the source code of this file.

Macros

#define expect(expected, got)   ok(got == expected, "Expected %d, got %d\n", expected, got)
 
#define NUM_MSG_SEQUENCE   2
 
#define PARENT_SEQ_INDEX   0
 
#define SYSLINK_SEQ_INDEX   1
 

Functions

static void flush_events (void)
 
static LRESULT WINAPI parent_wnd_proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static BOOL register_parent_wnd_class (void)
 
static HWND create_parent_window (void)
 
static LRESULT WINAPI syslink_subclass_proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static HWND create_syslink (DWORD style, HWND parent)
 
static void test_create_syslink (void)
 
static void test_LM_GETIDEALHEIGHT (void)
 
static void test_LM_GETIDEALSIZE (void)
 
 START_TEST (syslink)
 

Variables

static HWND hWndParent
 
static struct msg_sequencesequences [NUM_MSG_SEQUENCE]
 
static const struct message empty_wnd_seq []
 
static const struct message parent_create_syslink_wnd_seq []
 
static const struct message visible_syslink_wnd_seq []
 
static const struct message parent_visible_syslink_wnd_seq []
 
static const WCHAR parentClassW [] = {'S','y','s','l','i','n','k',' ','t','e','s','t',' ','p','a','r','e','n','t',' ','c','l','a','s','s',0}
 
static WNDPROC syslink_oldproc
 

Macro Definition Documentation

◆ expect

#define expect (   expected,
  got 
)    ok(got == expected, "Expected %d, got %d\n", expected, got)

Definition at line 27 of file syslink.c.

◆ NUM_MSG_SEQUENCE

#define NUM_MSG_SEQUENCE   2

Definition at line 28 of file syslink.c.

◆ PARENT_SEQ_INDEX

#define PARENT_SEQ_INDEX   0

Definition at line 29 of file syslink.c.

◆ SYSLINK_SEQ_INDEX

#define SYSLINK_SEQ_INDEX   1

Definition at line 30 of file syslink.c.

Function Documentation

◆ create_parent_window()

static HWND create_parent_window ( void  )
static

Definition at line 128 of file syslink.c.

129{
130 static const WCHAR titleW[] = {'S','y','s','l','i','n','k',' ','t','e','s','t',' ','p','a','r','e','n','t',' ','w','i','n','d','o','w',0};
132 return NULL;
133
137 0, 0, 200, 100, GetDesktopWindow(),
139}
#define NULL
Definition: types.h:112
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
static const WCHAR titleW[]
Definition: htmlelem.c:1067
#define WS_CAPTION
Definition: pedump.c:624
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_MINIMIZEBOX
Definition: pedump.c:631
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by START_TEST().

◆ create_syslink()

static HWND create_syslink ( DWORD  style,
HWND  parent 
)
static

Definition at line 163 of file syslink.c.

164{
165 HWND hWndSysLink;
166 static const WCHAR linkW[] = {'H','e','a','d',' ','<','a',' ','h','r','e','f','=','"','l','i','n','k','1','"','>','N','a','m','e','1','<','/','a','>',' ','M','i','d','d','l','e',' ','<','a',' ','h','r','e','f','=','"','l','i','n','k','2','"','>','N','a','m','e','2','<','/','a','>',' ','T','a','i','l',0};
167
168 /* Only Unicode will do here */
169 hWndSysLink = CreateWindowExW(0, WC_LINK, linkW,
170 style, 0, 0, 150, 50,
172 if (!hWndSysLink) return NULL;
173
174 if (GetWindowLongPtrW(hWndSysLink, GWLP_USERDATA))
175 /* On Windows XP SysLink takes GWLP_USERDATA for itself! */
176 trace("SysLink makes use of GWLP_USERDATA\n");
177
179
180 return hWndSysLink;
181}
Arabic default style
Definition: afstyles.h:94
#define trace
Definition: atltest.h:70
static const WCHAR linkW[]
Definition: string.c:50
r parent
Definition: btrfs.c:3010
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define WC_LINK
Definition: commctrl.h:4737
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
#define GetWindowLongPtrW
Definition: winuser.h:4828
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2905
#define SetWindowLongPtrW
Definition: winuser.h:5345

Referenced by test_create_syslink(), test_LM_GETIDEALHEIGHT(), and test_LM_GETIDEALSIZE().

◆ flush_events()

static void flush_events ( void  )
static

Definition at line 63 of file syslink.c.

64{
65 MSG msg;
66 int diff = 200;
67 int min_timeout = 100;
68 DWORD time = GetTickCount() + diff;
69
70 while (diff > 0)
71 {
72 if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
73 while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
74 diff = time - GetTickCount();
75 }
76}
#define msg(x)
Definition: auth_time.c:54
#define WAIT_TIMEOUT
Definition: dderror.h:14
#define FALSE
Definition: types.h:117
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
unsigned long DWORD
Definition: ntddk_ex.h:95
__u16 time
Definition: mkdosfs.c:8
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
#define QS_ALLINPUT
Definition: winuser.h:902
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define PM_REMOVE
Definition: winuser.h:1195
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)

Referenced by START_TEST(), and test_create_syslink().

◆ parent_wnd_proc()

static LRESULT WINAPI parent_wnd_proc ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 78 of file syslink.c.

79{
80 static LONG defwndproc_counter = 0;
82 struct message msg;
83
84 /* log system messages, except for painting */
85 if (message < WM_USER &&
86 message != WM_PAINT &&
91 message != WM_GETICON &&
93 {
94 msg.message = message;
95 msg.flags = sent|wparam|lparam;
96 if (defwndproc_counter) msg.flags |= defwinproc;
97 msg.wParam = wParam;
98 msg.lParam = lParam;
100 }
101
102 defwndproc_counter++;
104 defwndproc_counter--;
105
106 return ret;
107}
@ sent
Definition: SystemMenu.c:27
@ defwinproc
Definition: SystemMenu.c:32
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
#define add_message(msg)
Definition: SystemMenu.c:98
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
long LONG
Definition: pedump.c:60
Definition: tftpd.h:60
UINT message
Definition: SystemMenu.c:42
int ret
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LRESULT
Definition: windef.h:209
#define WM_PAINT
Definition: winuser.h:1619
#define WM_ERASEBKGND
Definition: winuser.h:1624
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NCHITTEST
Definition: winuser.h:1685
#define WM_GETTEXT
Definition: winuser.h:1617
#define WM_DEVICECHANGE
Definition: winuser.h:1810
#define WM_USER
Definition: winuser.h:1894
#define WM_NCPAINT
Definition: winuser.h:1686

Referenced by register_parent_wnd_class().

◆ register_parent_wnd_class()

static BOOL register_parent_wnd_class ( void  )
static

Definition at line 111 of file syslink.c.

112{
113 WNDCLASSW cls;
114
115 cls.style = 0;
117 cls.cbClsExtra = 0;
118 cls.cbWndExtra = 0;
120 cls.hIcon = 0;
123 cls.lpszMenuName = NULL;
125 return RegisterClassW(&cls);
126}
LPCWSTR lpszClassName
Definition: winuser.h:3184
LPCWSTR lpszMenuName
Definition: winuser.h:3183
HBRUSH hbrBackground
Definition: winuser.h:3182
HICON hIcon
Definition: winuser.h:3180
HINSTANCE hInstance
Definition: winuser.h:3179
int cbClsExtra
Definition: winuser.h:3177
UINT style
Definition: winuser.h:3175
WNDPROC lpfnWndProc
Definition: winuser.h:3176
int cbWndExtra
Definition: winuser.h:3178
HCURSOR hCursor
Definition: winuser.h:3181
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define WHITE_BRUSH
Definition: wingdi.h:902
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define IDC_ARROW
Definition: winuser.h:687
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2088
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by create_parent_window().

◆ START_TEST()

START_TEST ( syslink  )

Definition at line 245 of file syslink.c.

246{
247 ULONG_PTR ctx_cookie;
249 POINT orig_pos;
250 HANDLE hCtx;
251
252 if (!load_v6_module(&ctx_cookie, &hCtx))
253 return;
254
255 /* LoadLibrary is needed. This file has no reference to functions in comctl32 */
256 hComctl32 = LoadLibraryA("comctl32.dll");
257 ok(hComctl32 != NULL, "Failed to load comctl32.dll.\n");
258
259 /* Move the cursor off the parent window */
260 GetCursorPos(&orig_pos);
261 SetCursorPos(400, 400);
262
264
265 /* Create parent window */
267 ok(hWndParent != NULL, "Failed to create parent Window!\n");
268 flush_events();
269
273
275 unload_v6_module(ctx_cookie, hCtx);
276 SetCursorPos(orig_pos.x, orig_pos.y);
277}
#define ok(value,...)
Definition: atltest.h:57
static void init_msg_sequences(struct msg_sequence **seq, int n)
Definition: msg.h:391
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
static HMODULE hComctl32
Definition: misc.c:38
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
uint32_t ULONG_PTR
Definition: typedefs.h:65
static BOOL load_v6_module(ULONG_PTR *pcookie, HANDLE *hCtx)
Definition: v6util.h:71
static void unload_v6_module(ULONG_PTR cookie, HANDLE hCtx)
Definition: v6util.h:63
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2653
BOOL WINAPI SetCursorPos(_In_ int, _In_ int)
Definition: cursoricon.c:2645
BOOL WINAPI DestroyWindow(_In_ HWND)

◆ syslink_subclass_proc()

static LRESULT WINAPI syslink_subclass_proc ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 143 of file syslink.c.

144{
145 static LONG defwndproc_counter = 0;
146 struct message msg = { 0 };
147 LRESULT ret;
148
149 msg.message = message;
150 msg.flags = sent|wparam|lparam;
151 if (defwndproc_counter) msg.flags |= defwinproc;
152 msg.wParam = wParam;
153 msg.lParam = lParam;
155
156 defwndproc_counter++;
158 defwndproc_counter--;
159
160 return ret;
161}
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by create_syslink().

◆ test_create_syslink()

static void test_create_syslink ( void  )
static

Definition at line 183 of file syslink.c.

184{
185 HWND hWndSysLink;
186 LONG oldstyle;
187
188 /* Create an invisible SysLink control */
191 ok(hWndSysLink != NULL, "Expected non NULL value (le %u)\n", GetLastError());
192 flush_events();
195
196 /* Make the SysLink control visible */
198 oldstyle = GetWindowLongA(hWndSysLink, GWL_STYLE);
199 SetWindowLongA(hWndSysLink, GWL_STYLE, oldstyle | WS_VISIBLE);
200 RedrawWindow(hWndSysLink, NULL, NULL, RDW_INVALIDATE);
201 flush_events();
204
205 DestroyWindow(hWndSysLink);
206}
#define ok_sequence(exp, contx, todo)
Definition: SystemMenu.c:275
static void flush_sequences(struct msg_sequence **seq, int n)
Definition: msg.h:97
#define TRUE
Definition: types.h:120
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
#define GWL_STYLE
Definition: winuser.h:851
#define RDW_INVALIDATE
Definition: winuser.h:1213

Referenced by START_TEST().

◆ test_LM_GETIDEALHEIGHT()

static void test_LM_GETIDEALHEIGHT ( void  )
static

Definition at line 208 of file syslink.c.

209{
210 HWND hwnd;
211 LONG ret;
212
214 ok(hwnd != NULL, "Failed to create SysLink window.\n");
215
217 ok(ret > 0, "Unexpected ideal height, %d.\n", ret);
218
220}
#define LM_GETIDEALHEIGHT
Definition: commctrl.h:4771
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by START_TEST().

◆ test_LM_GETIDEALSIZE()

static void test_LM_GETIDEALSIZE ( void  )
static

Definition at line 222 of file syslink.c.

223{
224 HWND hwnd;
225 LONG ret;
226 SIZE sz;
227
229 ok(hwnd != NULL, "Failed to create SysLink window.\n");
230
231 memset(&sz, 0, sizeof(sz));
233 ok(ret > 0, "Unexpected return value, %d.\n", ret);
234 if (sz.cy == 0)
235 win_skip("LM_GETIDEALSIZE is not supported.\n");
236 else
237 {
238 ok(sz.cx > 5, "Unexpected ideal width, %d.\n", sz.cx);
239 ok(sz.cy == ret, "Unexpected ideal height, %d.\n", sz.cy);
240 }
241
243}
#define LM_GETIDEALSIZE
Definition: commctrl.h:4772
#define win_skip
Definition: test.h:160
#define memset(x, y, z)
Definition: compat.h:39
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
LONG_PTR LPARAM
Definition: windef.h:208

Referenced by START_TEST().

Variable Documentation

◆ empty_wnd_seq

const struct message empty_wnd_seq[]
static
Initial value:
= {
{0}
}

Definition at line 36 of file syslink.c.

Referenced by test_create_syslink().

◆ hWndParent

HWND hWndParent
static

Definition at line 32 of file syslink.c.

Referenced by AdvPropGeneralDlgProc(), CenterWindow(), ChildWindowFromPoint(), ClbStyleW(), co_UserCreateWindowEx(), ATL::CWindowImplBaseT< TBase, TWinTraits >::Create(), CListView::Create(), ATL::CWindowImpl< T, TBase, TWinTraits >::Create(), CToolbar< TItemData >::Create(), CTooltips::Create(), ATL::CDialogImpl< T, TBase >::Create(), ATL::CWindow::Create(), CreateDialogIndirectParamA(), CreateDialogIndirectParamAorW(), CreateDialogIndirectParamW(), CreateDialogParamA(), CreateDialogParamW(), CreateMDIWindowA(), CreateMDIWindowW(), CISFBand::CreateSimpleToolbar(), CreateWindowExA(), CreateWindowExW(), CTaskSwitchWnd_CreateInstance(), DeviceAdvancedPropertiesA(), DeviceAdvancedPropertiesW(), DeviceCreateHardwarePage(), DeviceCreateHardwarePageEx(), DeviceManager_ExecuteA(), DeviceManager_ExecuteW(), DeviceProblemWizardA(), DeviceProblemWizardW(), DeviceProperties_RunDLLA(), DeviceProperties_RunDLLW(), DevicePropertiesA(), DevicePropertiesExA(), DevicePropertiesExW(), DevicePropertiesW(), DevInstallW(), DialogBoxIndirectParamA(), DialogBoxIndirectParamAorW(), DialogBoxIndirectParamW(), DialogBoxParamA(), DialogBoxParamW(), DisplayAdvancedSettings(), DisplayDeviceAdvancedProperties(), ATL::CDialogImpl< T, TBase >::DoModal(), EnumChildWindows(), EventLogProperties(), ATL::CWindow::GetTopLevelParent(), HardwareDlgProc(), CIconWatcher::Initialize(), CTaskToolbar::Initialize(), CNotifyToolbar::Initialize(), CSysPagerWnd::Initialize(), CTrayClockWnd::Initialize(), CTaskSwitchWnd::Initialize(), InstallDevInst(), InstallDevInstEx(), IsChild(), LaunchDeviceManager(), LaunchHardwareWizard(), NtUserCreateWindowEx(), NtUserFillWindow(), CBandSiteBase::SetDeskBarSite(), SHCreateWorkerWindowA(), SHCreateWorkerWindowW(), SHFind_InitMenuPopup(), ShowAboutDlg(), ShowDeviceProblemWizard(), SHSetParentHwnd(), START_TEST(), test_create_syslink(), test_CShellMenu(), test_CShellMenu_callbacks(), test_LM_GETIDEALHEIGHT(), test_LM_GETIDEALSIZE(), test_pack_MCI_ANIM_OPEN_PARMSA(), test_pack_MCI_ANIM_OPEN_PARMSW(), test_pack_MCI_DGV_OPEN_PARMSA(), test_pack_MCI_DGV_OPEN_PARMSW(), test_pack_MCI_OVLY_OPEN_PARMSA(), test_pack_MCI_OVLY_OPEN_PARMSW(), and User32CreateWindowEx().

◆ parent_create_syslink_wnd_seq

const struct message parent_create_syslink_wnd_seq[]
static
Initial value:
= {
{ WM_QUERYUISTATE, sent|optional},
{0}
}
@ optional
Definition: SystemMenu.c:34
#define WM_NOTIFY
Definition: richedit.h:61
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1771
#define WM_CREATE
Definition: winuser.h:1607
#define WM_GETFONT
Definition: winuser.h:1650
#define WM_PARENTNOTIFY
Definition: winuser.h:1802

Definition at line 40 of file syslink.c.

Referenced by test_create_syslink().

◆ parent_visible_syslink_wnd_seq

const struct message parent_visible_syslink_wnd_seq[]
static
Initial value:
= {
{0}
}

Definition at line 56 of file syslink.c.

Referenced by test_create_syslink().

◆ parentClassW

const WCHAR parentClassW[] = {'S','y','s','l','i','n','k',' ','t','e','s','t',' ','p','a','r','e','n','t',' ','c','l','a','s','s',0}
static

Definition at line 109 of file syslink.c.

Referenced by create_parent_window(), and register_parent_wnd_class().

◆ sequences

struct msg_sequence* sequences[NUM_MSG_SEQUENCE]
static

Definition at line 34 of file syslink.c.

Referenced by parent_wnd_proc(), START_TEST(), syslink_subclass_proc(), and test_create_syslink().

◆ syslink_oldproc

WNDPROC syslink_oldproc
static

Definition at line 141 of file syslink.c.

Referenced by create_syslink(), and syslink_subclass_proc().

◆ visible_syslink_wnd_seq

const struct message visible_syslink_wnd_seq[]
static
Initial value:
= {
{ WM_STYLECHANGING, sent|wparam, GWL_STYLE},
{ WM_STYLECHANGED, sent|wparam, GWL_STYLE},
{0}
}

Definition at line 49 of file syslink.c.

Referenced by test_create_syslink().