Commit 3845cc10 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/tests: Link to comctl32.dll dynamically.

parent d5be8f57
TESTDLL = comctl32.dll TESTDLL = comctl32.dll
IMPORTS = comctl32 ole32 user32 gdi32 advapi32 IMPORTS = ole32 user32 gdi32 advapi32
C_SRCS = \ C_SRCS = \
animate.c \ animate.c \
......
...@@ -108,26 +108,6 @@ static void create_animate(DWORD parent_style, DWORD animate_style) ...@@ -108,26 +108,6 @@ static void create_animate(DWORD parent_style, DWORD animate_style)
update_window(hAnimateParentWnd); update_window(hAnimateParentWnd);
} }
static void init(void)
{
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
hComctl32 = GetModuleHandleA("comctl32.dll");
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (pInitCommonControlsEx)
{
INITCOMMONCONTROLSEX iccex;
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_ANIMATE_CLASS;
pInitCommonControlsEx(&iccex);
}
else
InitCommonControls();
shell32 = LoadLibraryA("Shell32.dll");
}
static void destroy_animate(void) static void destroy_animate(void)
{ {
MSG msg; MSG msg;
...@@ -175,7 +155,7 @@ static void test_play(void) ...@@ -175,7 +155,7 @@ static void test_play(void)
START_TEST(animate) START_TEST(animate)
{ {
init(); shell32 = LoadLibraryA("Shell32.dll");
test_play(); test_play();
......
...@@ -480,25 +480,20 @@ static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, L ...@@ -480,25 +480,20 @@ static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, L
return 0L; return 0L;
} }
static BOOL init(void) static void init_functions(void)
{ {
HMODULE hComctl32; HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
WNDCLASSA wc;
INITCOMMONCONTROLSEX iccex;
hComctl32 = GetModuleHandleA("comctl32.dll"); #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); #define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
if (!pInitCommonControlsEx) X2(SetWindowSubclass, 410);
{ #undef X
win_skip("InitCommonControlsEx() is missing. Skipping the tests\n"); #undef X2
return FALSE; }
}
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_USEREX_CLASSES;
pInitCommonControlsEx(&iccex);
pSetWindowSubclass = (void*)GetProcAddress(hComctl32, (LPSTR)410); static BOOL init(void)
{
WNDCLASSA wc;
wc.style = CS_HREDRAW | CS_VREDRAW; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
...@@ -1161,6 +1156,8 @@ START_TEST(combo) ...@@ -1161,6 +1156,8 @@ START_TEST(combo)
ULONG_PTR ctx_cookie; ULONG_PTR ctx_cookie;
HANDLE hCtx; HANDLE hCtx;
init_functions();
if (!init()) if (!init())
return; return;
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#define NUM_MSG_SEQUENCES 1 #define NUM_MSG_SEQUENCES 1
#define DATETIME_SEQ_INDEX 0 #define DATETIME_SEQ_INDEX 0
static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
static const struct message test_dtm_set_format_seq[] = { static const struct message test_dtm_set_format_seq[] = {
...@@ -777,19 +779,21 @@ static void test_dts_shownone(void) ...@@ -777,19 +779,21 @@ static void test_dts_shownone(void)
DestroyWindow(hwnd); DestroyWindow(hwnd);
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(InitCommonControlsEx);
#undef X
}
START_TEST(datetime) START_TEST(datetime)
{ {
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
INITCOMMONCONTROLSEX iccex; INITCOMMONCONTROLSEX iccex;
hComctl32 = GetModuleHandleA("comctl32.dll"); init_functions();
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
return;
}
iccex.dwSize = sizeof(iccex); iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_DATE_CLASSES; iccex.dwICC = ICC_DATE_CLASSES;
pInitCommonControlsEx(&iccex); pInitCommonControlsEx(&iccex);
......
...@@ -59,38 +59,33 @@ static INT (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT); ...@@ -59,38 +59,33 @@ static INT (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT);
static BOOL (WINAPI *pDPA_SetPtr)(HDPA,INT,PVOID); static BOOL (WINAPI *pDPA_SetPtr)(HDPA,INT,PVOID);
static BOOL (WINAPI *pDPA_Sort)(HDPA,PFNDPACOMPARE,LPARAM); static BOOL (WINAPI *pDPA_Sort)(HDPA,PFNDPACOMPARE,LPARAM);
#define COMCTL32_GET_PROC(func, ord) \ static void init_functions(void)
((p ## func = (PVOID)GetProcAddress(hcomctl32,(LPCSTR)ord)) ? 1 \
: (trace( #func " not exported\n"), 0))
static BOOL InitFunctionPtrs(HMODULE hcomctl32)
{ {
/* 4.00+ */ HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
if(COMCTL32_GET_PROC(DPA_Clone, 331) &&
COMCTL32_GET_PROC(DPA_Create, 328) &&
COMCTL32_GET_PROC(DPA_CreateEx, 340) &&
COMCTL32_GET_PROC(DPA_DeleteAllPtrs, 337) &&
COMCTL32_GET_PROC(DPA_DeletePtr, 336) &&
COMCTL32_GET_PROC(DPA_Destroy, 329) &&
COMCTL32_GET_PROC(DPA_GetPtr, 332) &&
COMCTL32_GET_PROC(DPA_GetPtrIndex, 333) &&
COMCTL32_GET_PROC(DPA_Grow, 330) &&
COMCTL32_GET_PROC(DPA_InsertPtr, 334) &&
COMCTL32_GET_PROC(DPA_Search, 339) &&
COMCTL32_GET_PROC(DPA_SetPtr, 335) &&
COMCTL32_GET_PROC(DPA_Sort, 338))
{
/* 4.71+ */
COMCTL32_GET_PROC(DPA_DestroyCallback, 386) &&
COMCTL32_GET_PROC(DPA_EnumCallback, 385) &&
COMCTL32_GET_PROC(DPA_LoadStream, 9) &&
COMCTL32_GET_PROC(DPA_Merge, 11) &&
COMCTL32_GET_PROC(DPA_SaveStream, 10);
return TRUE;
}
return FALSE; #define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
/* 4.00+ */
X2(DPA_Clone, 331);
X2(DPA_Create, 328);
X2(DPA_CreateEx, 340);
X2(DPA_DeleteAllPtrs, 337);
X2(DPA_DeletePtr, 336);
X2(DPA_Destroy, 329);
X2(DPA_GetPtr, 332);
X2(DPA_GetPtrIndex, 333);
X2(DPA_Grow, 330);
X2(DPA_InsertPtr, 334);
X2(DPA_Search, 339);
X2(DPA_SetPtr, 335);
X2(DPA_Sort, 338);
/* 4.71+ */
X2(DPA_DestroyCallback, 386);
X2(DPA_EnumCallback, 385);
X2(DPA_LoadStream, 9);
X2(DPA_Merge, 11);
X2(DPA_SaveStream, 10);
#undef X2
} }
/* Callbacks */ /* Callbacks */
...@@ -628,7 +623,7 @@ static void test_DPA_LoadStream(void) ...@@ -628,7 +623,7 @@ static void test_DPA_LoadStream(void)
dpa = NULL; dpa = NULL;
hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, NULL); hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, NULL);
expect(S_OK, hRes); expect(S_OK, hRes);
DPA_Destroy(dpa); pDPA_Destroy(dpa);
/* try with altered dwData2 field */ /* try with altered dwData2 field */
header.dwSize = sizeof(header); header.dwSize = sizeof(header);
...@@ -742,15 +737,7 @@ if (0) { ...@@ -742,15 +737,7 @@ if (0) {
START_TEST(dpa) START_TEST(dpa)
{ {
HMODULE hcomctl32; init_functions();
hcomctl32 = GetModuleHandleA("comctl32.dll");
if(!InitFunctionPtrs(hcomctl32))
{
win_skip("Needed functions are not available\n");
return;
}
test_dpa(); test_dpa();
test_DPA_Merge(); test_DPA_Merge();
......
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
#include "v6util.h" #include "v6util.h"
#include "msg.h" #include "msg.h"
static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int);
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
typedef struct tagEXPECTEDNOTIFY typedef struct tagEXPECTEDNOTIFY
{ {
INT iCode; INT iCode;
...@@ -953,7 +956,7 @@ static void test_hdm_sethotdivider(HWND hParent) ...@@ -953,7 +956,7 @@ static void test_hdm_sethotdivider(HWND hParent)
static void test_hdm_imageMessages(HWND hParent) static void test_hdm_imageMessages(HWND hParent)
{ {
HIMAGELIST hImageList = ImageList_Create (4, 4, 0, 1, 0); HIMAGELIST hImageList = pImageList_Create (4, 4, 0, 1, 0);
HIMAGELIST hIml; HIMAGELIST hIml;
BOOL wasValid; BOOL wasValid;
HWND hChild; HWND hChild;
...@@ -973,13 +976,13 @@ static void test_hdm_imageMessages(HWND hParent) ...@@ -973,13 +976,13 @@ static void test_hdm_imageMessages(HWND hParent)
hIml = (HIMAGELIST) SendMessageA(hChild, HDM_CREATEDRAGIMAGE, 0, 0); hIml = (HIMAGELIST) SendMessageA(hChild, HDM_CREATEDRAGIMAGE, 0, 0);
ok(hIml != NULL, "Expected non-NULL handle, got %p\n", hIml); ok(hIml != NULL, "Expected non-NULL handle, got %p\n", hIml);
ImageList_Destroy(hIml); pImageList_Destroy(hIml);
ok_sequence(sequences, HEADER_SEQ_INDEX, imageMessages_seq, "imageMessages sequence testing", FALSE); ok_sequence(sequences, HEADER_SEQ_INDEX, imageMessages_seq, "imageMessages sequence testing", FALSE);
DestroyWindow(hChild); DestroyWindow(hChild);
wasValid = ImageList_Destroy(hImageList); wasValid = pImageList_Destroy(hImageList);
ok(wasValid, "Header must not free image list at destruction!\n"); ok(wasValid, "Header must not free image list at destruction!\n");
} }
...@@ -1644,28 +1647,23 @@ static LRESULT CALLBACK HeaderTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LP ...@@ -1644,28 +1647,23 @@ static LRESULT CALLBACK HeaderTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LP
return 0L; return 0L;
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(ImageList_Create);
X(ImageList_Destroy);
#undef X
}
static BOOL init(void) static BOOL init(void)
{ {
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
WNDCLASSA wc; WNDCLASSA wc;
INITCOMMONCONTROLSEX iccex;
TEXTMETRICA tm; TEXTMETRICA tm;
HFONT hOldFont; HFONT hOldFont;
HDC hdc; HDC hdc;
hComctl32 = GetModuleHandleA("comctl32.dll");
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
return FALSE;
}
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_USEREX_CLASSES;
pInitCommonControlsEx(&iccex);
wc.style = CS_HREDRAW | CS_VREDRAW; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.cbWndExtra = 0;
...@@ -1821,6 +1819,8 @@ START_TEST(header) ...@@ -1821,6 +1819,8 @@ START_TEST(header)
ULONG_PTR ctx_cookie; ULONG_PTR ctx_cookie;
HANDLE hCtx; HANDLE hCtx;
init_functions();
if (!init()) if (!init())
return; return;
...@@ -1852,6 +1852,8 @@ START_TEST(header) ...@@ -1852,6 +1852,8 @@ START_TEST(header)
return; return;
} }
init_functions();
/* comctl32 version 6 tests start here */ /* comctl32 version 6 tests start here */
test_hdf_fixedwidth(parent_hwnd); test_hdf_fixedwidth(parent_hwnd);
test_hds_nosizing(parent_hwnd); test_hds_nosizing(parent_hwnd);
......
...@@ -85,6 +85,7 @@ static BOOL (WINAPI *pImageList_Write)(HIMAGELIST, IStream *); ...@@ -85,6 +85,7 @@ static BOOL (WINAPI *pImageList_Write)(HIMAGELIST, IStream *);
static HIMAGELIST (WINAPI *pImageList_Read)(IStream *); static HIMAGELIST (WINAPI *pImageList_Read)(IStream *);
static BOOL (WINAPI *pImageList_Copy)(HIMAGELIST, int, HIMAGELIST, int, UINT); static BOOL (WINAPI *pImageList_Copy)(HIMAGELIST, int, HIMAGELIST, int, UINT);
static HIMAGELIST (WINAPI *pImageList_LoadImageW)(HINSTANCE, LPCWSTR, int, int, COLORREF, UINT, UINT); static HIMAGELIST (WINAPI *pImageList_LoadImageW)(HINSTANCE, LPCWSTR, int, int, COLORREF, UINT, UINT);
static BOOL (WINAPI *pImageList_Draw)(HIMAGELIST,INT,HDC,INT,INT,UINT);
static HINSTANCE hinst; static HINSTANCE hinst;
...@@ -205,7 +206,7 @@ static HDC show_image(HWND hwnd, HIMAGELIST himl, int idx, int size, ...@@ -205,7 +206,7 @@ static HDC show_image(HWND hwnd, HIMAGELIST himl, int idx, int size,
SetWindowTextA(hwnd, loc); SetWindowTextA(hwnd, loc);
hdc = GetDC(hwnd); hdc = GetDC(hwnd);
ImageList_Draw(himl, idx, hdc, 0, 0, ILD_TRANSPARENT); pImageList_Draw(himl, idx, hdc, 0, 0, ILD_TRANSPARENT);
force_redraw(hwnd); force_redraw(hwnd);
...@@ -504,8 +505,8 @@ static void test_DrawIndirect(void) ...@@ -504,8 +505,8 @@ static void test_DrawIndirect(void)
ok(hbm3 != 0, "no bitmap 3\n"); ok(hbm3 != 0, "no bitmap 3\n");
/* add three */ /* add three */
ok(0 == ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n"); ok(0 == pImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n");
ok(1 == ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n"); ok(1 == pImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n");
if (pImageList_SetImageCount) if (pImageList_SetImageCount)
{ {
...@@ -1576,7 +1577,7 @@ cleanup: ...@@ -1576,7 +1577,7 @@ cleanup:
if(himl) if(himl)
{ {
ret = ImageList_Destroy(himl); ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n"); ok(ret, "ImageList_Destroy failed\n");
} }
} }
...@@ -1599,21 +1600,21 @@ static void test_iimagelist(void) ...@@ -1599,21 +1600,21 @@ static void test_iimagelist(void)
imgl = (IImageList*)createImageList(32, 32); imgl = (IImageList*)createImageList(32, 32);
ret = IImageList_AddRef(imgl); ret = IImageList_AddRef(imgl);
ok(ret == 2, "Expected 2, got %d\n", ret); ok(ret == 2, "Expected 2, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl); ret = pImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret); ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl); ret = pImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret); ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl); ret = pImageList_Destroy((HIMAGELIST)imgl);
ok(ret == FALSE, "Expected FALSE, got %d\n", ret); ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
imgl = (IImageList*)createImageList(32, 32); imgl = (IImageList*)createImageList(32, 32);
ret = IImageList_AddRef(imgl); ret = IImageList_AddRef(imgl);
ok(ret == 2, "Expected 2, got %d\n", ret); ok(ret == 2, "Expected 2, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl); ret = pImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret); ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = IImageList_Release(imgl); ret = IImageList_Release(imgl);
ok(ret == 0, "Expected 0, got %d\n", ret); ok(ret == 0, "Expected 0, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl); ret = pImageList_Destroy((HIMAGELIST)imgl);
ok(ret == FALSE, "Expected FALSE, got %d\n", ret); ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
/* ref counting, HIMAGELIST_QueryInterface adds a reference */ /* ref counting, HIMAGELIST_QueryInterface adds a reference */
...@@ -1674,7 +1675,7 @@ static void test_IImageList_Add_Remove(void) ...@@ -1674,7 +1675,7 @@ static void test_IImageList_Add_Remove(void)
int ret; int ret;
/* create an imagelist to play with */ /* create an imagelist to play with */
himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3); himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
ok(himl != 0,"failed to create imagelist\n"); ok(himl != 0,"failed to create imagelist\n");
imgl = (IImageList *) himl; imgl = (IImageList *) himl;
...@@ -1728,7 +1729,7 @@ static void test_IImageList_Get_SetImageCount(void) ...@@ -1728,7 +1729,7 @@ static void test_IImageList_Get_SetImageCount(void)
INT ret; INT ret;
/* create an imagelist to play with */ /* create an imagelist to play with */
himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3); himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
ok(himl != 0,"failed to create imagelist\n"); ok(himl != 0,"failed to create imagelist\n");
imgl = (IImageList *) himl; imgl = (IImageList *) himl;
...@@ -1773,7 +1774,7 @@ static void test_IImageList_Draw(void) ...@@ -1773,7 +1774,7 @@ static void test_IImageList_Draw(void)
ok(hdc!=NULL, "couldn't get DC\n"); ok(hdc!=NULL, "couldn't get DC\n");
/* create an imagelist to play with */ /* create an imagelist to play with */
himl = ImageList_Create(48, 48, ILC_COLOR16, 0, 3); himl = pImageList_Create(48, 48, ILC_COLOR16, 0, 3);
ok(himl!=0,"failed to create imagelist\n"); ok(himl!=0,"failed to create imagelist\n");
imgl = (IImageList *) himl; imgl = (IImageList *) himl;
...@@ -1850,10 +1851,10 @@ static void test_IImageList_Merge(void) ...@@ -1850,10 +1851,10 @@ static void test_IImageList_Merge(void)
HRESULT hr; HRESULT hr;
int ret; int ret;
himl1 = ImageList_Create(32,32,0,0,3); himl1 = pImageList_Create(32,32,0,0,3);
ok(himl1 != NULL,"failed to create himl1\n"); ok(himl1 != NULL,"failed to create himl1\n");
himl2 = ImageList_Create(32,32,0,0,3); himl2 = pImageList_Create(32,32,0,0,3);
ok(himl2 != NULL,"failed to create himl2\n"); ok(himl2 != NULL,"failed to create himl2\n");
hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
...@@ -1887,7 +1888,7 @@ if (0) ...@@ -1887,7 +1888,7 @@ if (0)
/* Same happens if himl2 is empty */ /* Same happens if himl2 is empty */
IImageList_Release(imgl2); IImageList_Release(imgl2);
himl2 = ImageList_Create(32,32,0,0,3); himl2 = pImageList_Create(32,32,0,0,3);
ok(himl2 != NULL,"failed to recreate himl2\n"); ok(himl2 != NULL,"failed to recreate himl2\n");
imgl2 = (IImageList *) himl2; imgl2 = (IImageList *) himl2;
...@@ -2385,7 +2386,7 @@ static void test_IImageList_GetIconSize(void) ...@@ -2385,7 +2386,7 @@ static void test_IImageList_GetIconSize(void)
static void init_functions(void) static void init_functions(void)
{ {
HMODULE hComCtl32 = GetModuleHandleA("comctl32.dll"); HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f); #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord); #define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
...@@ -2414,6 +2415,7 @@ static void init_functions(void) ...@@ -2414,6 +2415,7 @@ static void init_functions(void)
X(ImageList_LoadImageW); X(ImageList_LoadImageW);
X(ImageList_CoCreateInstance); X(ImageList_CoCreateInstance);
X(HIMAGELIST_QueryInterface); X(HIMAGELIST_QueryInterface);
X(ImageList_Draw);
#undef X #undef X
#undef X2 #undef X2
} }
...@@ -2427,8 +2429,6 @@ START_TEST(imagelist) ...@@ -2427,8 +2429,6 @@ START_TEST(imagelist)
hinst = GetModuleHandleA(NULL); hinst = GetModuleHandleA(NULL);
InitCommonControls();
test_create_destroy(); test_create_destroy();
test_begindrag(); test_begindrag();
test_hotspot(); test_hotspot();
......
...@@ -61,32 +61,7 @@ static void test_get_set_text(void) ...@@ -61,32 +61,7 @@ static void test_get_set_text(void)
DestroyWindow(hwnd); DestroyWindow(hwnd);
} }
static BOOL init(void)
{
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
INITCOMMONCONTROLSEX iccex;
hComctl32 = GetModuleHandleA("comctl32.dll");
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
win_skip("InitCommonControlsEx() is missing.\n");
return FALSE;
}
iccex.dwSize = sizeof(iccex);
/* W2K and below need ICC_INTERNET_CLASSES for the IP Address Control */
iccex.dwICC = ICC_INTERNET_CLASSES;
pInitCommonControlsEx(&iccex);
return TRUE;
}
START_TEST(ipaddress) START_TEST(ipaddress)
{ {
if (!init())
return;
test_get_set_text(); test_get_set_text();
} }
...@@ -28,6 +28,11 @@ ...@@ -28,6 +28,11 @@
#include "v6util.h" #include "v6util.h"
#include "msg.h" #include "msg.h"
static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int);
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
static int (WINAPI *pImageList_Add)(HIMAGELIST, HBITMAP, HBITMAP);
static BOOL (WINAPI *p_TrackMouseEvent)(TRACKMOUSEEVENT *);
enum seq_index { enum seq_index {
PARENT_SEQ_INDEX, PARENT_SEQ_INDEX,
PARENT_FULL_SEQ_INDEX, PARENT_FULL_SEQ_INDEX,
...@@ -73,6 +78,18 @@ static BOOL g_focus_test_LVN_DELETEITEM; ...@@ -73,6 +78,18 @@ static BOOL g_focus_test_LVN_DELETEITEM;
static HWND subclass_editbox(HWND hwndListview); static HWND subclass_editbox(HWND hwndListview);
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(ImageList_Create);
X(ImageList_Destroy);
X(ImageList_Add);
X(_TrackMouseEvent);
#undef X
}
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
static const struct message create_ownerdrawfixed_parent_seq[] = { static const struct message create_ownerdrawfixed_parent_seq[] = {
...@@ -848,13 +865,13 @@ static void test_images(void) ...@@ -848,13 +865,13 @@ static void test_images(void)
RECT r1, r2; RECT r1, r2;
static CHAR hello[] = "hello"; static CHAR hello[] = "hello";
himl = ImageList_Create(40, 40, 0, 4, 4); himl = pImageList_Create(40, 40, 0, 4, 4);
ok(himl != NULL, "failed to create imagelist\n"); ok(himl != NULL, "failed to create imagelist\n");
hbmp = CreateBitmap(40, 40, 1, 1, NULL); hbmp = CreateBitmap(40, 40, 1, 1, NULL);
ok(hbmp != NULL, "failed to create bitmap\n"); ok(hbmp != NULL, "failed to create bitmap\n");
r = ImageList_Add(himl, hbmp, 0); r = pImageList_Add(himl, hbmp, 0);
ok(r == 0, "should be zero\n"); ok(r == 0, "should be zero\n");
hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_OWNERDRAWFIXED, hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_OWNERDRAWFIXED,
...@@ -1539,7 +1556,7 @@ static void test_create(void) ...@@ -1539,7 +1556,7 @@ static void test_create(void)
cls.lpszClassName = "MyListView32"; cls.lpszClassName = "MyListView32";
ok(RegisterClassExA(&cls), "RegisterClassEx failed\n"); ok(RegisterClassExA(&cls), "RegisterClassEx failed\n");
test_create_imagelist = ImageList_Create(16, 16, 0, 5, 10); test_create_imagelist = pImageList_Create(16, 16, 0, 5, 10);
hList = CreateWindowA("MyListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); hList = CreateWindowA("MyListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0);
ok((HIMAGELIST)SendMessageA(hList, LVM_GETIMAGELIST, 0, 0) == test_create_imagelist, "Image list not obtained\n"); ok((HIMAGELIST)SendMessageA(hList, LVM_GETIMAGELIST, 0, 0) == test_create_imagelist, "Image list not obtained\n");
hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0);
...@@ -3732,15 +3749,15 @@ static void test_hittest(void) ...@@ -3732,15 +3749,15 @@ static void test_hittest(void)
test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE); test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE);
test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE); test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE);
/* try with icons, state icons index is 1 based so at least 2 bitmaps needed */ /* try with icons, state icons index is 1 based so at least 2 bitmaps needed */
himl = ImageList_Create(16, 16, 0, 4, 4); himl = pImageList_Create(16, 16, 0, 4, 4);
ok(himl != NULL, "failed to create imagelist\n"); ok(himl != NULL, "failed to create imagelist\n");
hbmp = CreateBitmap(16, 16, 1, 1, NULL); hbmp = CreateBitmap(16, 16, 1, 1, NULL);
ok(hbmp != NULL, "failed to create bitmap\n"); ok(hbmp != NULL, "failed to create bitmap\n");
r = ImageList_Add(himl, hbmp, 0); r = pImageList_Add(himl, hbmp, 0);
ok(r == 0, "should be zero\n"); ok(r == 0, "should be zero\n");
hbmp = CreateBitmap(16, 16, 1, 1, NULL); hbmp = CreateBitmap(16, 16, 1, 1, NULL);
ok(hbmp != NULL, "failed to create bitmap\n"); ok(hbmp != NULL, "failed to create bitmap\n");
r = ImageList_Add(himl, hbmp, 0); r = pImageList_Add(himl, hbmp, 0);
ok(r == 1, "should be one\n"); ok(r == 1, "should be one\n");
r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl); r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl);
...@@ -4022,15 +4039,15 @@ todo_wine ...@@ -4022,15 +4039,15 @@ todo_wine
expect(TRUE, r); expect(TRUE, r);
/* state icons */ /* state icons */
himl = ImageList_Create(16, 16, 0, 2, 2); himl = pImageList_Create(16, 16, 0, 2, 2);
ok(himl != NULL, "failed to create imagelist\n"); ok(himl != NULL, "failed to create imagelist\n");
hbm = CreateBitmap(16, 16, 1, 1, NULL); hbm = CreateBitmap(16, 16, 1, 1, NULL);
ok(hbm != NULL, "failed to create bitmap\n"); ok(hbm != NULL, "failed to create bitmap\n");
r = ImageList_Add(himl, hbm, 0); r = pImageList_Add(himl, hbm, 0);
expect(0, r); expect(0, r);
hbm = CreateBitmap(16, 16, 1, 1, NULL); hbm = CreateBitmap(16, 16, 1, 1, NULL);
ok(hbm != NULL, "failed to create bitmap\n"); ok(hbm != NULL, "failed to create bitmap\n");
r = ImageList_Add(himl, hbm, 0); r = pImageList_Add(himl, hbm, 0);
expect(1, r); expect(1, r);
r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl); r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl);
...@@ -4702,9 +4719,9 @@ static void test_getitemspacing(void) ...@@ -4702,9 +4719,9 @@ static void test_getitemspacing(void)
expect(cy, HIWORD(ret)); expect(cy, HIWORD(ret));
/* now try with icons */ /* now try with icons */
himl40 = ImageList_Create(40, 40, 0, 4, 4); himl40 = pImageList_Create(40, 40, 0, 4, 4);
ok(himl40 != NULL, "failed to create imagelist\n"); ok(himl40 != NULL, "failed to create imagelist\n");
himl80 = ImageList_Create(80, 80, 0, 4, 4); himl80 = pImageList_Create(80, 80, 0, 4, 4);
ok(himl80 != NULL, "failed to create imagelist\n"); ok(himl80 != NULL, "failed to create imagelist\n");
ret = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)himl40); ret = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)himl40);
expect(0, ret); expect(0, ret);
...@@ -4772,7 +4789,7 @@ static void test_getitemspacing(void) ...@@ -4772,7 +4789,7 @@ static void test_getitemspacing(void)
expect(cy + 40, HIWORD(ret)); expect(cy + 40, HIWORD(ret));
SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0); SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0);
ImageList_Destroy(himl80); pImageList_Destroy(himl80);
DestroyWindow(hwnd); DestroyWindow(hwnd);
/* LVS_SMALLICON */ /* LVS_SMALLICON */
hwnd = create_listview_control(LVS_SMALLICON); hwnd = create_listview_control(LVS_SMALLICON);
...@@ -4790,7 +4807,7 @@ static void test_getitemspacing(void) ...@@ -4790,7 +4807,7 @@ static void test_getitemspacing(void)
expect(cy + 40, HIWORD(ret)); expect(cy + 40, HIWORD(ret));
SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0); SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0);
ImageList_Destroy(himl40); pImageList_Destroy(himl40);
DestroyWindow(hwnd); DestroyWindow(hwnd);
/* LVS_REPORT */ /* LVS_REPORT */
hwnd = create_listview_control(LVS_REPORT); hwnd = create_listview_control(LVS_REPORT);
...@@ -4973,11 +4990,11 @@ static void test_approximate_viewrect(void) ...@@ -4973,11 +4990,11 @@ static void test_approximate_viewrect(void)
/* LVS_ICON */ /* LVS_ICON */
hwnd = create_listview_control(LVS_ICON); hwnd = create_listview_control(LVS_ICON);
himl = ImageList_Create(40, 40, 0, 4, 4); himl = pImageList_Create(40, 40, 0, 4, 4);
ok(himl != NULL, "failed to create imagelist\n"); ok(himl != NULL, "failed to create imagelist\n");
hbmp = CreateBitmap(40, 40, 1, 1, NULL); hbmp = CreateBitmap(40, 40, 1, 1, NULL);
ok(hbmp != NULL, "failed to create bitmap\n"); ok(hbmp != NULL, "failed to create bitmap\n");
ret = ImageList_Add(himl, hbmp, 0); ret = pImageList_Add(himl, hbmp, 0);
expect(0, ret); expect(0, ret);
ret = SendMessageA(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)himl); ret = SendMessageA(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)himl);
expect(0, ret); expect(0, ret);
...@@ -5594,7 +5611,7 @@ static void test_createdragimage(void) ...@@ -5594,7 +5611,7 @@ static void test_createdragimage(void)
himl = (HIMAGELIST)SendMessageA(list, LVM_CREATEDRAGIMAGE, 0, (LPARAM)&pt); himl = (HIMAGELIST)SendMessageA(list, LVM_CREATEDRAGIMAGE, 0, (LPARAM)&pt);
ok(himl != NULL, "got %p\n", himl); ok(himl != NULL, "got %p\n", himl);
ImageList_Destroy(himl); pImageList_Destroy(himl);
DestroyWindow(list); DestroyWindow(list);
} }
...@@ -5709,9 +5726,9 @@ static void test_imagelists(void) ...@@ -5709,9 +5726,9 @@ static void test_imagelists(void)
HIMAGELIST himl1, himl2, himl3; HIMAGELIST himl1, himl2, himl3;
LRESULT ret; LRESULT ret;
himl1 = ImageList_Create(40, 40, 0, 4, 4); himl1 = pImageList_Create(40, 40, 0, 4, 4);
himl2 = ImageList_Create(40, 40, 0, 4, 4); himl2 = pImageList_Create(40, 40, 0, 4, 4);
himl3 = ImageList_Create(40, 40, 0, 4, 4); himl3 = pImageList_Create(40, 40, 0, 4, 4);
ok(himl1 != NULL, "Failed to create imagelist\n"); ok(himl1 != NULL, "Failed to create imagelist\n");
ok(himl2 != NULL, "Failed to create imagelist\n"); ok(himl2 != NULL, "Failed to create imagelist\n");
ok(himl3 != NULL, "Failed to create imagelist\n"); ok(himl3 != NULL, "Failed to create imagelist\n");
...@@ -5977,7 +5994,7 @@ static void test_oneclickactivate(void) ...@@ -5977,7 +5994,7 @@ static void test_oneclickactivate(void)
track.cbSize = sizeof(track); track.cbSize = sizeof(track);
track.dwFlags = TME_QUERY; track.dwFlags = TME_QUERY;
_TrackMouseEvent(&track); p_TrackMouseEvent(&track);
ok(track.hwndTrack == hwnd, "hwndTrack != hwnd\n"); ok(track.hwndTrack == hwnd, "hwndTrack != hwnd\n");
ok(track.dwFlags == TME_LEAVE, "dwFlags = %x\n", track.dwFlags); ok(track.dwFlags == TME_LEAVE, "dwFlags = %x\n", track.dwFlags);
...@@ -6241,23 +6258,10 @@ static void test_state_image(void) ...@@ -6241,23 +6258,10 @@ static void test_state_image(void)
START_TEST(listview) START_TEST(listview)
{ {
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
ULONG_PTR ctx_cookie; ULONG_PTR ctx_cookie;
HANDLE hCtx; HANDLE hCtx;
hComctl32 = GetModuleHandleA("comctl32.dll"); init_functions();
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (pInitCommonControlsEx)
{
INITCOMMONCONTROLSEX iccex;
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_LISTVIEW_CLASSES;
pInitCommonControlsEx(&iccex);
}
else
InitCommonControls();
init_msg_sequences(sequences, NUM_MSG_SEQUENCES); init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
...@@ -6319,6 +6323,8 @@ START_TEST(listview) ...@@ -6319,6 +6323,8 @@ START_TEST(listview)
return; return;
} }
init_functions();
/* comctl32 version 6 tests start here */ /* comctl32 version 6 tests start here */
test_get_set_view(); test_get_set_view();
test_canceleditlabel(); test_canceleditlabel();
......
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
#define SEL_NOTIFY_TEST_ID 100 #define SEL_NOTIFY_TEST_ID 100
static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
static HWND parent_wnd; static HWND parent_wnd;
...@@ -598,8 +600,6 @@ static HWND create_parent_window(void) ...@@ -598,8 +600,6 @@ static HWND create_parent_window(void)
{ {
HWND hwnd; HWND hwnd;
InitCommonControls();
/* flush message sequences, so we can check the new sequence by the end of function */ /* flush message sequences, so we can check the new sequence by the end of function */
flush_sequences(sequences, NUM_MSG_SEQUENCES); flush_sequences(sequences, NUM_MSG_SEQUENCES);
...@@ -2039,22 +2039,23 @@ static void test_sel_notify(void) ...@@ -2039,22 +2039,23 @@ static void test_sel_notify(void)
} }
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(InitCommonControlsEx);
#undef X
}
START_TEST(monthcal) START_TEST(monthcal)
{ {
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
INITCOMMONCONTROLSEX iccex; INITCOMMONCONTROLSEX iccex;
HMODULE hComctl32;
ULONG_PTR ctx_cookie; ULONG_PTR ctx_cookie;
HANDLE hCtx; HANDLE hCtx;
hComctl32 = GetModuleHandleA("comctl32.dll"); init_functions();
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
return;
}
iccex.dwSize = sizeof(iccex); iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_DATE_CLASSES; iccex.dwICC = ICC_DATE_CLASSES;
pInitCommonControlsEx(&iccex); pInitCommonControlsEx(&iccex);
......
...@@ -76,18 +76,22 @@ static INT (WINAPI *pFindMRUData)(HANDLE, LPCVOID, DWORD, LPINT); ...@@ -76,18 +76,22 @@ static INT (WINAPI *pFindMRUData)(HANDLE, LPCVOID, DWORD, LPINT);
static INT (WINAPI *pAddMRUData)(HANDLE, LPCVOID, DWORD); static INT (WINAPI *pAddMRUData)(HANDLE, LPCVOID, DWORD);
static HANDLE (WINAPI *pCreateMRUListW)(MRUINFOW*); static HANDLE (WINAPI *pCreateMRUListW)(MRUINFOW*);
static void InitPointers(void) static void init_functions(void)
{ {
pCreateMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)151); hComctl32 = LoadLibraryA("comctl32.dll");
pFreeMRUList = (void*)GetProcAddress(hComctl32,(LPCSTR)152);
pAddMRUStringA = (void*)GetProcAddress(hComctl32,(LPCSTR)153); #define X2(f, ord) p##f = (void*)GetProcAddress(hComctl32, (const char *)ord);
pEnumMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)154); X2(CreateMRUListA, 151);
pCreateMRUListLazyA = (void*)GetProcAddress(hComctl32,(LPCSTR)157); X2(FreeMRUList, 152);
pAddMRUData = (void*)GetProcAddress(hComctl32,(LPCSTR)167); X2(AddMRUStringA, 153);
pFindMRUData = (void*)GetProcAddress(hComctl32,(LPCSTR)169); X2(EnumMRUListA, 154);
pCreateMRUListW = (void*)GetProcAddress(hComctl32,(LPCSTR)400); X2(CreateMRUListLazyA, 157);
pEnumMRUListW = (void*)GetProcAddress(hComctl32,(LPCSTR)403); X2(AddMRUData, 167);
pCreateMRUListLazyW = (void*)GetProcAddress(hComctl32,(LPCSTR)404); X2(FindMRUData, 169);
X2(CreateMRUListW, 400);
X2(EnumMRUListW, 403);
X2(CreateMRUListLazyW, 404);
#undef X2
} }
/* Based on RegDeleteTreeW from dlls/advapi32/registry.c */ /* Based on RegDeleteTreeW from dlls/advapi32/registry.c */
...@@ -705,13 +709,11 @@ static void test_CreateMRUListLazyW(void) ...@@ -705,13 +709,11 @@ static void test_CreateMRUListLazyW(void)
START_TEST(mru) START_TEST(mru)
{ {
hComctl32 = GetModuleHandleA("comctl32.dll");
delete_reg_entries(); delete_reg_entries();
if (!create_reg_entries()) if (!create_reg_entries())
return; return;
InitPointers(); init_functions();
test_MRUListA(); test_MRUListA();
test_CreateMRUListLazyA(); test_CreateMRUListLazyA();
......
...@@ -339,7 +339,6 @@ START_TEST(pager) ...@@ -339,7 +339,6 @@ START_TEST(pager)
pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410); pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410);
InitCommonControls();
init_msg_sequences(sequences, NUM_MSG_SEQUENCES); init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
parent_wnd = create_parent_window(); parent_wnd = create_parent_window();
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
static HWND hProgressParentWnd, hProgressWnd; static HWND hProgressParentWnd, hProgressWnd;
static const char progressTestClass[] = "ProgressBarTestClass"; static const char progressTestClass[] = "ProgressBarTestClass";
static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
static HWND create_progress(DWORD style) static HWND create_progress(DWORD style)
{ {
...@@ -94,24 +95,10 @@ static void update_window(HWND hWnd) ...@@ -94,24 +95,10 @@ static void update_window(HWND hWnd)
static void init(void) static void init(void)
{ {
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
WNDCLASSA wc; WNDCLASSA wc;
RECT rect; RECT rect;
BOOL ret; BOOL ret;
hComctl32 = GetModuleHandleA("comctl32.dll");
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (pInitCommonControlsEx)
{
INITCOMMONCONTROLSEX iccex;
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_PROGRESS_CLASS;
pInitCommonControlsEx(&iccex);
}
else
InitCommonControls();
wc.style = CS_HREDRAW | CS_VREDRAW; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.cbWndExtra = 0;
...@@ -135,7 +122,7 @@ static void init(void) ...@@ -135,7 +122,7 @@ static void init(void)
GetClientRect(hProgressParentWnd, &rect); GetClientRect(hProgressParentWnd, &rect);
hProgressWnd = CreateWindowExA(0, PROGRESS_CLASSA, "", WS_CHILD | WS_VISIBLE, hProgressWnd = CreateWindowExA(0, PROGRESS_CLASSA, "", WS_CHILD | WS_VISIBLE,
0, 0, rect.right, rect.bottom, hProgressParentWnd, NULL, GetModuleHandleA(NULL), 0); 0, 0, rect.right, rect.bottom, hProgressParentWnd, NULL, GetModuleHandleA(NULL), 0);
ok(hProgressWnd != NULL, "failed to create parent wnd\n"); ok(hProgressWnd != NULL, "Failed to create progress bar.\n");
progress_wndproc = (WNDPROC)SetWindowLongPtrA(hProgressWnd, GWLP_WNDPROC, (LPARAM)progress_subclass_proc); progress_wndproc = (WNDPROC)SetWindowLongPtrA(hProgressWnd, GWLP_WNDPROC, (LPARAM)progress_subclass_proc);
ShowWindow(hProgressParentWnd, SW_SHOWNORMAL); ShowWindow(hProgressParentWnd, SW_SHOWNORMAL);
...@@ -250,8 +237,25 @@ static void test_setcolors(void) ...@@ -250,8 +237,25 @@ static void test_setcolors(void)
DestroyWindow(progress); DestroyWindow(progress);
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(InitCommonControlsEx);
#undef X
}
START_TEST(progress) START_TEST(progress)
{ {
INITCOMMONCONTROLSEX iccex;
init_functions();
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_PROGRESS_CLASS;
pInitCommonControlsEx(&iccex);
init(); init();
test_redraw(); test_redraw();
......
...@@ -34,6 +34,10 @@ static LONG active_page = -1; ...@@ -34,6 +34,10 @@ static LONG active_page = -1;
#define IDC_APPLY_BUTTON 12321 #define IDC_APPLY_BUTTON 12321
static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageA)(const PROPSHEETPAGEA *desc);
static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageW)(const PROPSHEETPAGEW *desc);
static BOOL (WINAPI *pDestroyPropertySheetPage)(HPROPSHEETPAGE proppage);
static INT_PTR (WINAPI *pPropertySheetA)(const PROPSHEETHEADERA *header);
static void detect_locale(void) static void detect_locale(void)
{ {
...@@ -141,7 +145,7 @@ static void test_title(void) ...@@ -141,7 +145,7 @@ static void test_title(void)
psp.pfnDlgProc = page_dlg_proc; psp.pfnDlgProc = page_dlg_proc;
psp.lParam = 0; psp.lParam = 0;
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -152,7 +156,7 @@ static void test_title(void) ...@@ -152,7 +156,7 @@ static void test_title(void)
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
psh.pfnCallback = sheet_callback; psh.pfnCallback = sheet_callback;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg);
style = GetWindowLongA(hdlg, GWL_STYLE); style = GetWindowLongA(hdlg, GWL_STYLE);
...@@ -180,7 +184,7 @@ static void test_nopage(void) ...@@ -180,7 +184,7 @@ static void test_nopage(void)
psp.pfnDlgProc = page_dlg_proc; psp.pfnDlgProc = page_dlg_proc;
psp.lParam = 0; psp.lParam = 0;
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -191,7 +195,7 @@ static void test_nopage(void) ...@@ -191,7 +195,7 @@ static void test_nopage(void)
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
psh.pfnCallback = sheet_callback; psh.pfnCallback = sheet_callback;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg);
ShowWindow(hdlg,SW_NORMAL); ShowWindow(hdlg,SW_NORMAL);
...@@ -260,7 +264,7 @@ static void test_disableowner(void) ...@@ -260,7 +264,7 @@ static void test_disableowner(void)
psp.pfnDlgProc = NULL; psp.pfnDlgProc = NULL;
psp.lParam = 0; psp.lParam = 0;
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -271,7 +275,7 @@ static void test_disableowner(void) ...@@ -271,7 +275,7 @@ static void test_disableowner(void)
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
psh.pfnCallback = disableowner_callback; psh.pfnCallback = disableowner_callback;
p = PropertySheetA(&psh); p = pPropertySheetA(&psh);
todo_wine todo_wine
ok(p == 0, "Expected 0, got %ld\n", p); ok(p == 0, "Expected 0, got %ld\n", p);
ok(IsWindowEnabled(parenthwnd) != 0, "parent window should be enabled\n"); ok(IsWindowEnabled(parenthwnd) != 0, "parent window should be enabled\n");
...@@ -357,25 +361,25 @@ static void test_wiznavigation(void) ...@@ -357,25 +361,25 @@ static void test_wiznavigation(void)
psp[0].hInstance = GetModuleHandleA(NULL); psp[0].hInstance = GetModuleHandleA(NULL);
U(psp[0]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_INTRO); U(psp[0]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_INTRO);
psp[0].pfnDlgProc = nav_page_proc; psp[0].pfnDlgProc = nav_page_proc;
hpsp[0] = CreatePropertySheetPageA(&psp[0]); hpsp[0] = pCreatePropertySheetPageA(&psp[0]);
psp[1].dwSize = sizeof(PROPSHEETPAGEA); psp[1].dwSize = sizeof(PROPSHEETPAGEA);
psp[1].hInstance = GetModuleHandleA(NULL); psp[1].hInstance = GetModuleHandleA(NULL);
U(psp[1]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EDIT); U(psp[1]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EDIT);
psp[1].pfnDlgProc = nav_page_proc; psp[1].pfnDlgProc = nav_page_proc;
hpsp[1] = CreatePropertySheetPageA(&psp[1]); hpsp[1] = pCreatePropertySheetPageA(&psp[1]);
psp[2].dwSize = sizeof(PROPSHEETPAGEA); psp[2].dwSize = sizeof(PROPSHEETPAGEA);
psp[2].hInstance = GetModuleHandleA(NULL); psp[2].hInstance = GetModuleHandleA(NULL);
U(psp[2]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_RADIO); U(psp[2]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_RADIO);
psp[2].pfnDlgProc = nav_page_proc; psp[2].pfnDlgProc = nav_page_proc;
hpsp[2] = CreatePropertySheetPageA(&psp[2]); hpsp[2] = pCreatePropertySheetPageA(&psp[2]);
psp[3].dwSize = sizeof(PROPSHEETPAGEA); psp[3].dwSize = sizeof(PROPSHEETPAGEA);
psp[3].hInstance = GetModuleHandleA(NULL); psp[3].hInstance = GetModuleHandleA(NULL);
U(psp[3]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EXIT); U(psp[3]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EXIT);
psp[3].pfnDlgProc = nav_page_proc; psp[3].pfnDlgProc = nav_page_proc;
hpsp[3] = CreatePropertySheetPageA(&psp[3]); hpsp[3] = pCreatePropertySheetPageA(&psp[3]);
/* set up the property sheet dialog */ /* set up the property sheet dialog */
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
...@@ -385,7 +389,7 @@ static void test_wiznavigation(void) ...@@ -385,7 +389,7 @@ static void test_wiznavigation(void)
psh.nPages = 4; psh.nPages = 4;
psh.hwndParent = GetDesktopWindow(); psh.hwndParent = GetDesktopWindow();
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
ok(active_page == 0, "Active page should be 0. Is: %d\n", active_page); ok(active_page == 0, "Active page should be 0. Is: %d\n", active_page);
...@@ -480,7 +484,7 @@ static void test_buttons(void) ...@@ -480,7 +484,7 @@ static void test_buttons(void)
psp.pfnDlgProc = page_dlg_proc; psp.pfnDlgProc = page_dlg_proc;
psp.lParam = 0; psp.lParam = 0;
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -491,7 +495,7 @@ static void test_buttons(void) ...@@ -491,7 +495,7 @@ static void test_buttons(void)
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
psh.pfnCallback = sheet_callback; psh.pfnCallback = sheet_callback;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got null handle\n"); ok(hdlg != INVALID_HANDLE_VALUE, "got null handle\n");
/* OK button */ /* OK button */
...@@ -587,7 +591,7 @@ static void test_custom_default_button(void) ...@@ -587,7 +591,7 @@ static void test_custom_default_button(void)
add_button_has_been_pressed = FALSE; add_button_has_been_pressed = FALSE;
/* Create the modeless property sheet. */ /* Create the modeless property sheet. */
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "Cannot create the property sheet\n"); ok(hdlg != INVALID_HANDLE_VALUE, "Cannot create the property sheet\n");
/* Set the Add button as the default button. */ /* Set the Add button as the default button. */
...@@ -798,7 +802,7 @@ static void test_messages(void) ...@@ -798,7 +802,7 @@ static void test_messages(void)
psp.pfnDlgProc = page_dlg_proc_messages; psp.pfnDlgProc = page_dlg_proc_messages;
psp.lParam = 0; psp.lParam = 0;
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -810,7 +814,7 @@ static void test_messages(void) ...@@ -810,7 +814,7 @@ static void test_messages(void)
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
psh.pfnCallback = sheet_callback_messages; psh.pfnCallback = sheet_callback_messages;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
ShowWindow(hdlg,SW_NORMAL); ShowWindow(hdlg,SW_NORMAL);
...@@ -839,15 +843,15 @@ static void test_PSM_ADDPAGE(void) ...@@ -839,15 +843,15 @@ static void test_PSM_ADDPAGE(void)
psp.lParam = 0; psp.lParam = 0;
/* multiple pages with the same data */ /* multiple pages with the same data */
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
hpsp[1] = CreatePropertySheetPageA(&psp); hpsp[1] = pCreatePropertySheetPageA(&psp);
hpsp[2] = CreatePropertySheetPageA(&psp); hpsp[2] = pCreatePropertySheetPageA(&psp);
U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR); U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
hpsp[3] = CreatePropertySheetPageA(&psp); hpsp[3] = pCreatePropertySheetPageA(&psp);
psp.dwFlags = PSP_PREMATURE; psp.dwFlags = PSP_PREMATURE;
hpsp[4] = CreatePropertySheetPageA(&psp); hpsp[4] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -857,7 +861,7 @@ static void test_PSM_ADDPAGE(void) ...@@ -857,7 +861,7 @@ static void test_PSM_ADDPAGE(void)
psh.hwndParent = GetDesktopWindow(); psh.hwndParent = GetDesktopWindow();
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
/* add pages one by one */ /* add pages one by one */
...@@ -906,7 +910,7 @@ if (0) ...@@ -906,7 +910,7 @@ if (0)
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
ok(r == 3, "got %d\n", r); ok(r == 3, "got %d\n", r);
DestroyPropertySheetPage(hpsp[4]); pDestroyPropertySheetPage(hpsp[4]);
DestroyWindow(hdlg); DestroyWindow(hdlg);
} }
...@@ -929,15 +933,15 @@ static void test_PSM_INSERTPAGE(void) ...@@ -929,15 +933,15 @@ static void test_PSM_INSERTPAGE(void)
psp.lParam = 0; psp.lParam = 0;
/* multiple pages with the same data */ /* multiple pages with the same data */
hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[0] = pCreatePropertySheetPageA(&psp);
hpsp[1] = CreatePropertySheetPageA(&psp); hpsp[1] = pCreatePropertySheetPageA(&psp);
hpsp[2] = CreatePropertySheetPageA(&psp); hpsp[2] = pCreatePropertySheetPageA(&psp);
U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR); U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
hpsp[3] = CreatePropertySheetPageA(&psp); hpsp[3] = pCreatePropertySheetPageA(&psp);
psp.dwFlags = PSP_PREMATURE; psp.dwFlags = PSP_PREMATURE;
hpsp[4] = CreatePropertySheetPageA(&psp); hpsp[4] = pCreatePropertySheetPageA(&psp);
memset(&psh, 0, sizeof(psh)); memset(&psh, 0, sizeof(psh));
psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
...@@ -947,7 +951,7 @@ static void test_PSM_INSERTPAGE(void) ...@@ -947,7 +951,7 @@ static void test_PSM_INSERTPAGE(void)
psh.hwndParent = GetDesktopWindow(); psh.hwndParent = GetDesktopWindow();
U3(psh).phpage = hpsp; U3(psh).phpage = hpsp;
hdlg = (HWND)PropertySheetA(&psh); hdlg = (HWND)pPropertySheetA(&psh);
ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
/* add pages one by one */ /* add pages one by one */
...@@ -1000,7 +1004,7 @@ if (0) ...@@ -1000,7 +1004,7 @@ if (0)
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
ok(r == 3, "got %d\n", r); ok(r == 3, "got %d\n", r);
DestroyPropertySheetPage(hpsp[4]); pDestroyPropertySheetPage(hpsp[4]);
DestroyWindow(hdlg); DestroyWindow(hdlg);
} }
...@@ -1090,7 +1094,7 @@ static void test_CreatePropertySheetPage(void) ...@@ -1090,7 +1094,7 @@ static void test_CreatePropertySheetPage(void)
for (page.u.pageA.dwSize = PROPSHEETPAGEA_V1_SIZE - 1; page.u.pageA.dwSize <= PROPSHEETPAGEA_V4_SIZE + 1; page.u.pageA.dwSize++) for (page.u.pageA.dwSize = PROPSHEETPAGEA_V1_SIZE - 1; page.u.pageA.dwSize <= PROPSHEETPAGEA_V4_SIZE + 1; page.u.pageA.dwSize++)
{ {
page.addref_called = 0; page.addref_called = 0;
hpsp = CreatePropertySheetPageA(&page.u.pageA); hpsp = pCreatePropertySheetPageA(&page.u.pageA);
if (page.u.pageA.dwSize < PROPSHEETPAGEA_V1_SIZE) if (page.u.pageA.dwSize < PROPSHEETPAGEA_V1_SIZE)
ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageA.dwSize); ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageA.dwSize);
...@@ -1103,7 +1107,7 @@ static void test_CreatePropertySheetPage(void) ...@@ -1103,7 +1107,7 @@ static void test_CreatePropertySheetPage(void)
if (hpsp) if (hpsp)
{ {
page.release_called = 0; page.release_called = 0;
ret = DestroyPropertySheetPage(hpsp); ret = pDestroyPropertySheetPage(hpsp);
ok(ret, "Failed to destroy a page\n"); ok(ret, "Failed to destroy a page\n");
ok(page.release_called == 1, "Expected RELEASE callback message\n"); ok(page.release_called == 1, "Expected RELEASE callback message\n");
} }
...@@ -1119,7 +1123,7 @@ static void test_CreatePropertySheetPage(void) ...@@ -1119,7 +1123,7 @@ static void test_CreatePropertySheetPage(void)
for (page.u.pageW.dwSize = PROPSHEETPAGEW_V1_SIZE - 1; page.u.pageW.dwSize <= PROPSHEETPAGEW_V4_SIZE + 1; page.u.pageW.dwSize++) for (page.u.pageW.dwSize = PROPSHEETPAGEW_V1_SIZE - 1; page.u.pageW.dwSize <= PROPSHEETPAGEW_V4_SIZE + 1; page.u.pageW.dwSize++)
{ {
page.addref_called = 0; page.addref_called = 0;
hpsp = CreatePropertySheetPageW(&page.u.pageW); hpsp = pCreatePropertySheetPageW(&page.u.pageW);
if (page.u.pageW.dwSize < PROPSHEETPAGEW_V1_SIZE) if (page.u.pageW.dwSize < PROPSHEETPAGEW_V1_SIZE)
ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageW.dwSize); ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageW.dwSize);
...@@ -1132,13 +1136,25 @@ static void test_CreatePropertySheetPage(void) ...@@ -1132,13 +1136,25 @@ static void test_CreatePropertySheetPage(void)
if (hpsp) if (hpsp)
{ {
page.release_called = 0; page.release_called = 0;
ret = DestroyPropertySheetPage(hpsp); ret = pDestroyPropertySheetPage(hpsp);
ok(ret, "Failed to destroy a page\n"); ok(ret, "Failed to destroy a page\n");
ok(page.release_called == 1, "Expected RELEASE callback message\n"); ok(page.release_called == 1, "Expected RELEASE callback message\n");
} }
} }
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(CreatePropertySheetPageA);
X(CreatePropertySheetPageW);
X(DestroyPropertySheetPage);
X(PropertySheetA);
#undef X
}
START_TEST(propsheet) START_TEST(propsheet)
{ {
detect_locale(); detect_locale();
...@@ -1150,6 +1166,8 @@ START_TEST(propsheet) ...@@ -1150,6 +1166,8 @@ START_TEST(propsheet)
SetProcessDefaultLayout(LAYOUT_RTL); SetProcessDefaultLayout(LAYOUT_RTL);
} }
init_functions();
test_title(); test_title();
test_nopage(); test_nopage();
test_disableowner(); test_disableowner();
......
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
#include "wine/test.h" #include "wine/test.h"
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE, LPCSTR, int, int, COLORREF, UINT, UINT);
static RECT height_change_notify_rect; static RECT height_change_notify_rect;
static HWND hMainWnd; static HWND hMainWnd;
static int system_font_height; static int system_font_height;
...@@ -577,7 +580,7 @@ static void test_layout(void) ...@@ -577,7 +580,7 @@ static void test_layout(void)
check_sizes(); check_sizes();
/* an image will increase the band height */ /* an image will increase the band height */
himl = ImageList_LoadImageA(GetModuleHandleA("comctl32"), MAKEINTRESOURCEA(121), 24, 2, himl = pImageList_LoadImageA(GetModuleHandleA("comctl32"), MAKEINTRESOURCEA(121), 24, 2,
CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
ri.cbSize = sizeof(ri); ri.cbSize = sizeof(ri);
ri.fMask = RBIM_IMAGELIST; ri.fMask = RBIM_IMAGELIST;
...@@ -658,7 +661,7 @@ static void test_layout(void) ...@@ -658,7 +661,7 @@ static void test_layout(void)
rbsize_results_free(); rbsize_results_free();
DestroyWindow(hRebar); DestroyWindow(hRebar);
ImageList_Destroy(himl); pImageList_Destroy(himl);
} }
#if 0 /* use this to generate more tests */ #if 0 /* use this to generate more tests */
...@@ -1125,26 +1128,22 @@ static void test_notification(void) ...@@ -1125,26 +1128,22 @@ static void test_notification(void)
DestroyWindow(rebar); DestroyWindow(rebar);
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(ImageList_Destroy);
X(ImageList_LoadImageA);
#undef X
}
START_TEST(rebar) START_TEST(rebar)
{ {
HMODULE hComctl32;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
INITCOMMONCONTROLSEX iccex;
MSG msg; MSG msg;
init_system_font_height(); init_system_font_height();
init_functions();
/* LoadLibrary is needed. This file has no reference to functions in comctl32 */
hComctl32 = LoadLibraryA("comctl32.dll");
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
return;
}
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_COOL_CLASSES;
pInitCommonControlsEx(&iccex);
hMainWnd = create_parent_window(); hMainWnd = create_parent_window();
...@@ -1169,6 +1168,4 @@ out: ...@@ -1169,6 +1168,4 @@ out:
DispatchMessageA(&msg); DispatchMessageA(&msg);
} }
DestroyWindow(hMainWnd); DestroyWindow(hMainWnd);
FreeLibrary(hComctl32);
} }
...@@ -43,6 +43,8 @@ static INT g_dpisize; ...@@ -43,6 +43,8 @@ static INT g_dpisize;
static int g_wmdrawitm_ctr; static int g_wmdrawitm_ctr;
static WNDPROC g_wndproc_saved; static WNDPROC g_wndproc_saved;
static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
static HWND create_status_control(DWORD style, DWORD exstyle) static HWND create_status_control(DWORD style, DWORD exstyle)
{ {
HWND hWndStatus; HWND hWndStatus;
...@@ -584,17 +586,32 @@ static void test_notify(void) ...@@ -584,17 +586,32 @@ static void test_notify(void)
ok(g_got_contextmenu, "WM_RBUTTONUP did not activate the context menu!\n"); ok(g_got_contextmenu, "WM_RBUTTONUP did not activate the context menu!\n");
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(InitCommonControlsEx);
#undef X
}
START_TEST(status) START_TEST(status)
{ {
INITCOMMONCONTROLSEX iccex;
init_functions();
hinst = GetModuleHandleA(NULL); hinst = GetModuleHandleA(NULL);
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_BAR_CLASSES;
pInitCommonControlsEx(&iccex);
g_hMainWnd = CreateWindowExA(0, "static", "", WS_OVERLAPPEDWINDOW, g_hMainWnd = CreateWindowExA(0, "static", "", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 672+2*GetSystemMetrics(SM_CXSIZEFRAME), CW_USEDEFAULT, CW_USEDEFAULT, 672+2*GetSystemMetrics(SM_CXSIZEFRAME),
226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME), 226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME),
NULL, NULL, GetModuleHandleA(NULL), 0); NULL, NULL, GetModuleHandleA(NULL), 0);
InitCommonControls();
register_subclass(); register_subclass();
test_status_control(); test_status_control();
......
...@@ -286,7 +286,7 @@ static BOOL init_function_pointers(void) ...@@ -286,7 +286,7 @@ static BOOL init_function_pointers(void)
HMODULE hmod; HMODULE hmod;
void *ptr; void *ptr;
hmod = GetModuleHandleA("comctl32.dll"); hmod = LoadLibraryA("comctl32.dll");
ok(hmod != NULL, "got %p\n", hmod); ok(hmod != NULL, "got %p\n", hmod);
/* Functions have to be loaded by ordinal. Only XP and W2K3 export /* Functions have to be loaded by ordinal. Only XP and W2K3 export
......
...@@ -40,6 +40,11 @@ ...@@ -40,6 +40,11 @@
#define TabWidthPadded(padd_x, num) (DEFAULT_MIN_TAB_WIDTH - (TAB_PADDING_X - (padd_x)) * num) #define TabWidthPadded(padd_x, num) (DEFAULT_MIN_TAB_WIDTH - (TAB_PADDING_X - (padd_x)) * num)
static HIMAGELIST (WINAPI *pImageList_Create)(INT,INT,UINT,INT,INT);
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST);
static INT (WINAPI *pImageList_ReplaceIcon)(HIMAGELIST,INT,HICON);
static void CheckSize(HWND hwnd, INT width, INT height, const char *msg, int line) static void CheckSize(HWND hwnd, INT width, INT height, const char *msg, int line)
{ {
RECT r; RECT r;
...@@ -470,7 +475,7 @@ static void test_tab(INT nMinTabWidth) ...@@ -470,7 +475,7 @@ static void test_tab(INT nMinTabWidth)
{ {
HWND hwTab; HWND hwTab;
RECT rTab; RECT rTab;
HIMAGELIST himl = ImageList_Create(21, 21, ILC_COLOR, 3, 4); HIMAGELIST himl = pImageList_Create(21, 21, ILC_COLOR, 3, 4);
SIZE size; SIZE size;
HDC hdc; HDC hdc;
HFONT hOldFont; HFONT hOldFont;
...@@ -608,7 +613,7 @@ static void test_tab(INT nMinTabWidth) ...@@ -608,7 +613,7 @@ static void test_tab(INT nMinTabWidth)
DestroyWindow (hwTab); DestroyWindow (hwTab);
ImageList_Destroy(himl); pImageList_Destroy(himl);
} }
static void test_width(void) static void test_width(void)
...@@ -1165,12 +1170,12 @@ static void test_removeimage(void) ...@@ -1165,12 +1170,12 @@ static void test_removeimage(void)
INT i; INT i;
TCITEMA item; TCITEMA item;
HICON hicon; HICON hicon;
HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR, 3, 4); HIMAGELIST himl = pImageList_Create(16, 16, ILC_COLOR, 3, 4);
hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits); hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits);
ImageList_AddIcon(himl, hicon); pImageList_ReplaceIcon(himl, -1, hicon);
ImageList_AddIcon(himl, hicon); pImageList_ReplaceIcon(himl, -1, hicon);
ImageList_AddIcon(himl, hicon); pImageList_ReplaceIcon(himl, -1, hicon);
hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE); hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
...@@ -1185,7 +1190,8 @@ static void test_removeimage(void) ...@@ -1185,7 +1190,8 @@ static void test_removeimage(void)
/* remove image middle image */ /* remove image middle image */
SendMessageA(hwTab, TCM_REMOVEIMAGE, 1, 0); SendMessageA(hwTab, TCM_REMOVEIMAGE, 1, 0);
expect(2, ImageList_GetImageCount(himl)); i = pImageList_GetImageCount(himl);
ok(i == 2, "Unexpected image count %d.\n", i);
item.iImage = -1; item.iImage = -1;
SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item); SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
expect(0, item.iImage); expect(0, item.iImage);
...@@ -1197,7 +1203,8 @@ static void test_removeimage(void) ...@@ -1197,7 +1203,8 @@ static void test_removeimage(void)
expect(1, item.iImage); expect(1, item.iImage);
/* remove first image */ /* remove first image */
SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0); SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
expect(1, ImageList_GetImageCount(himl)); i = pImageList_GetImageCount(himl);
ok(i == 1, "Unexpected image count %d.\n", i);
item.iImage = 0; item.iImage = 0;
SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item); SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
expect(-1, item.iImage); expect(-1, item.iImage);
...@@ -1209,7 +1216,8 @@ static void test_removeimage(void) ...@@ -1209,7 +1216,8 @@ static void test_removeimage(void)
expect(0, item.iImage); expect(0, item.iImage);
/* remove the last one */ /* remove the last one */
SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0); SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
expect(0, ImageList_GetImageCount(himl)); i = pImageList_GetImageCount(himl);
ok(i == 0, "Unexpected image count %d.\n", i);
for(i = 0; i < 3; i++) { for(i = 0; i < 3; i++) {
item.iImage = 0; item.iImage = 0;
SendMessageA(hwTab, TCM_GETITEMA, i, (LPARAM)&item); SendMessageA(hwTab, TCM_GETITEMA, i, (LPARAM)&item);
...@@ -1217,7 +1225,7 @@ static void test_removeimage(void) ...@@ -1217,7 +1225,7 @@ static void test_removeimage(void)
} }
DestroyWindow(hwTab); DestroyWindow(hwTab);
ImageList_Destroy(himl); pImageList_Destroy(himl);
DestroyIcon(hicon); DestroyIcon(hicon);
} }
...@@ -1423,6 +1431,18 @@ static void test_create(void) ...@@ -1423,6 +1431,18 @@ static void test_create(void)
} }
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(ImageList_Create);
X(ImageList_Destroy);
X(ImageList_GetImageCount);
X(ImageList_ReplaceIcon);
#undef X
}
START_TEST(tab) START_TEST(tab)
{ {
LOGFONTA logfont; LOGFONTA logfont;
...@@ -1434,7 +1454,7 @@ START_TEST(tab) ...@@ -1434,7 +1454,7 @@ START_TEST(tab)
logfont.lfCharSet = ANSI_CHARSET; logfont.lfCharSet = ANSI_CHARSET;
hFont = CreateFontIndirectA(&logfont); hFont = CreateFontIndirectA(&logfont);
InitCommonControls(); init_functions();
test_width(); test_width();
......
...@@ -37,6 +37,13 @@ ...@@ -37,6 +37,13 @@
#define PARENT_SEQ_INDEX 0 #define PARENT_SEQ_INDEX 0
#define NUM_MSG_SEQUENCES 1 #define NUM_MSG_SEQUENCES 1
static HWND (WINAPI *pCreateToolbarEx)(HWND, DWORD, UINT, INT, HINSTANCE, UINT_PTR, const TBBUTTON *,
INT, INT, INT, INT, INT, UINT);
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST);
static BOOL (WINAPI *pImageList_GetIconSize)(HIMAGELIST, int *, int *);
static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE, LPCSTR, int, int, COLORREF, UINT, UINT);
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
static HWND hMainWnd; static HWND hMainWnd;
...@@ -376,7 +383,7 @@ static void basic_test(void) ...@@ -376,7 +383,7 @@ static void basic_test(void)
MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0); MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0);
MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0); MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0);
hToolbar = CreateToolbarEx(hMainWnd, hToolbar = pCreateToolbarEx(hMainWnd,
WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP | WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP |
WS_CHILD | TBSTYLE_LIST, WS_CHILD | TBSTYLE_LIST,
100, 100,
...@@ -482,8 +489,8 @@ static void add_128x15_bitmap(HWND hToolbar, int nCmds) ...@@ -482,8 +489,8 @@ static void add_128x15_bitmap(HWND hToolbar, int nCmds)
HIMAGELIST himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0); \ HIMAGELIST himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0); \
ok(himl != NULL, "No image list\n"); \ ok(himl != NULL, "No image list\n"); \
if (himl != NULL) {\ if (himl != NULL) {\
ok(ImageList_GetImageCount(himl) == count, "Images count mismatch - %d vs %d\n", count, ImageList_GetImageCount(himl)); \ ok(pImageList_GetImageCount(himl) == count, "Images count mismatch - %d vs %d\n", count, pImageList_GetImageCount(himl)); \
ImageList_GetIconSize(himl, &cx, &cy); \ pImageList_GetIconSize(himl, &cx, &cy); \
ok(cx == dx && cy == dy, "Icon size mismatch - %dx%d vs %dx%d\n", dx, dy, cx, cy); \ ok(cx == dx && cy == dy, "Icon size mismatch - %dx%d vs %dx%d\n", dx, dy, cx, cy); \
} \ } \
} }
...@@ -515,11 +522,11 @@ static void test_add_bitmap(void) ...@@ -515,11 +522,11 @@ static void test_add_bitmap(void)
himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0); himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0);
ok(himl != NULL, "Got %p\n", himl); ok(himl != NULL, "Got %p\n", himl);
ret = ImageList_GetIconSize(himl, &cx, &cy); ret = pImageList_GetIconSize(himl, &cx, &cy);
ok(ret, "Got %d\n", ret); ok(ret, "Got %d\n", ret);
ok(cx == cy, "Got %d x %d\n", cx, cy); ok(cx == cy, "Got %d x %d\n", cx, cy);
count = ImageList_GetImageCount(himl); count = pImageList_GetImageCount(himl);
/* Image count */ /* Image count */
switch (id) switch (id)
...@@ -688,7 +695,7 @@ static void test_add_bitmap(void) ...@@ -688,7 +695,7 @@ static void test_add_bitmap(void)
/* the control can add bitmaps to an existing image list */ /* the control can add bitmaps to an existing image list */
rebuild_toolbar(&hToolbar); rebuild_toolbar(&hToolbar);
himl = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15), himl = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
ok(himl != NULL, "failed to create imagelist\n"); ok(himl != NULL, "failed to create imagelist\n");
ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n");
...@@ -709,7 +716,7 @@ static void test_add_bitmap(void) ...@@ -709,7 +716,7 @@ static void test_add_bitmap(void)
addbmp.hInst = HINST_COMMCTRL; addbmp.hInst = HINST_COMMCTRL;
addbmp.nID = IDB_STD_SMALL_COLOR; addbmp.nID = IDB_STD_SMALL_COLOR;
rebuild_toolbar(&hToolbar); rebuild_toolbar(&hToolbar);
ImageList_Destroy(himl); pImageList_Destroy(himl);
ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n");
CHECK_IMAGELIST(15, 16, 16); CHECK_IMAGELIST(15, 16, 16);
...@@ -1506,14 +1513,14 @@ static void test_sizes(void) ...@@ -1506,14 +1513,14 @@ static void test_sizes(void)
/* TB_SETIMAGELIST always changes the height but the width only if necessary */ /* TB_SETIMAGELIST always changes the height but the width only if necessary */
SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100));
himl = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15), himl = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n");
check_button_size(hToolbar, 100, 21); check_button_size(hToolbar, 100, 21);
SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100));
check_button_size(hToolbar, 100, 100); check_button_size(hToolbar, 100, 100);
/* But there are no update when we change imagelist, and image sizes are the same */ /* But there are no update when we change imagelist, and image sizes are the same */
himl2 = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_128x15), himl2 = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_128x15),
20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LRESULT)himl2) == (LRESULT)himl, "TB_SETIMAGELIST failed\n"); ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LRESULT)himl2) == (LRESULT)himl, "TB_SETIMAGELIST failed\n");
check_button_size(hToolbar, 100, 100); check_button_size(hToolbar, 100, 100);
...@@ -1538,8 +1545,8 @@ static void test_sizes(void) ...@@ -1538,8 +1545,8 @@ static void test_sizes(void)
check_sizes_todo(0x30); /* some small problems with BTNS_AUTOSIZE button sizes */ check_sizes_todo(0x30); /* some small problems with BTNS_AUTOSIZE button sizes */
rebuild_toolbar(&hToolbar); rebuild_toolbar(&hToolbar);
ImageList_Destroy(himl); pImageList_Destroy(himl);
ImageList_Destroy(himl2); pImageList_Destroy(himl2);
SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&buttons3[3]); SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&buttons3[3]);
check_button_size(hToolbar, 7 + string_width(STRING2), 23 + fontheight); check_button_size(hToolbar, 7 + string_width(STRING2), 23 + fontheight);
...@@ -1823,43 +1830,43 @@ static void test_createtoolbarex(void) ...@@ -1823,43 +1830,43 @@ static void test_createtoolbarex(void)
TBBUTTON btns[3]; TBBUTTON btns[3];
ZeroMemory(&btns, sizeof(btns)); ZeroMemory(&btns, sizeof(btns));
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, 20, 20, 16, 16, sizeof(TBBUTTON)); 3, 20, 20, 16, 16, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 20, 20); CHECK_IMAGELIST(16, 20, 20);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x1a001b, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x1a001b, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, 4, 4, 16, 16, sizeof(TBBUTTON)); 3, 4, 4, 16, 16, sizeof(TBBUTTON));
CHECK_IMAGELIST(32, 4, 4); CHECK_IMAGELIST(32, 4, 4);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xa000b, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xa000b, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, 0, 8, 12, 12, sizeof(TBBUTTON)); 3, 0, 8, 12, 12, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 12, 12); CHECK_IMAGELIST(16, 12, 12);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x120013, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x120013, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, -1, 8, 12, 12, sizeof(TBBUTTON)); 3, -1, 8, 12, 12, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 12, 8); CHECK_IMAGELIST(16, 12, 8);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0013, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0013, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, -1, 8, -1, 12, sizeof(TBBUTTON)); 3, -1, 8, -1, 12, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 16, 8); CHECK_IMAGELIST(16, 16, 8);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0017, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0017, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, 0, 0, 12, -1, sizeof(TBBUTTON)); 3, 0, 0, 12, -1, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 12, 16); CHECK_IMAGELIST(16, 12, 16);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160013, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160013, "%x");
DestroyWindow(hToolbar); DestroyWindow(hToolbar);
hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns, hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
3, 0, 0, 0, 12, sizeof(TBBUTTON)); 3, 0, 0, 0, 12, sizeof(TBBUTTON));
CHECK_IMAGELIST(16, 16, 16); CHECK_IMAGELIST(16, 16, 16);
compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160017, "%x"); compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160017, "%x");
...@@ -1928,7 +1935,7 @@ static void test_setrows(void) ...@@ -1928,7 +1935,7 @@ static void test_setrows(void)
MakeButton(buttons+i, 1000+i, TBSTYLE_FLAT | TBSTYLE_CHECKGROUP, 0); MakeButton(buttons+i, 1000+i, TBSTYLE_FLAT | TBSTYLE_CHECKGROUP, 0);
/* Test 1 - 9 buttons */ /* Test 1 - 9 buttons */
hToolbar = CreateToolbarEx(hMainWnd, hToolbar = pCreateToolbarEx(hMainWnd,
WS_VISIBLE | WS_CLIPCHILDREN | WS_CHILD | CCS_NORESIZE | CCS_NOPARENTALIGN WS_VISIBLE | WS_CLIPCHILDREN | WS_CHILD | CCS_NORESIZE | CCS_NOPARENTALIGN
| CCS_NOMOVEY | CCS_TOP, | CCS_NOMOVEY | CCS_TOP,
0, 0,
...@@ -2047,7 +2054,7 @@ static void test_get_set_style(void) ...@@ -2047,7 +2054,7 @@ static void test_get_set_style(void)
MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0); MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0);
MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0); MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0);
hToolbar = CreateToolbarEx(hMainWnd, hToolbar = pCreateToolbarEx(hMainWnd,
WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP | WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP |
WS_CHILD | TBSTYLE_LIST, WS_CHILD | TBSTYLE_LIST,
100, 100,
...@@ -2507,6 +2514,19 @@ static void test_imagelist(void) ...@@ -2507,6 +2514,19 @@ static void test_imagelist(void)
DestroyWindow(hwnd); DestroyWindow(hwnd);
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(CreateToolbarEx);
X(ImageList_GetIconSize);
X(ImageList_GetImageCount);
X(ImageList_LoadImageA);
X(ImageList_Destroy);
#undef X
}
START_TEST(toolbar) START_TEST(toolbar)
{ {
WNDCLASSA wc; WNDCLASSA wc;
...@@ -2514,9 +2534,8 @@ START_TEST(toolbar) ...@@ -2514,9 +2534,8 @@ START_TEST(toolbar)
RECT rc; RECT rc;
init_msg_sequences(sequences, NUM_MSG_SEQUENCES); init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
init_functions();
InitCommonControls();
wc.style = CS_HREDRAW | CS_VREDRAW; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.cbWndExtra = 0;
......
...@@ -1057,7 +1057,7 @@ static void test_margin(void) ...@@ -1057,7 +1057,7 @@ static void test_margin(void)
START_TEST(tooltips) START_TEST(tooltips)
{ {
InitCommonControls(); LoadLibraryA("comctl32.dll");
test_create_tooltip(); test_create_tooltip();
test_customdraw(); test_customdraw();
......
...@@ -1296,8 +1296,9 @@ static void test_create(void) ...@@ -1296,8 +1296,9 @@ static void test_create(void)
START_TEST(trackbar) START_TEST(trackbar)
{ {
LoadLibraryA("comctl32.dll");
init_msg_sequences(sequences, NUM_MSG_SEQUENCE); init_msg_sequences(sequences, NUM_MSG_SEQUENCE);
InitCommonControls();
/* create parent window */ /* create parent window */
hWndParent = create_parent_window(); hWndParent = create_parent_window();
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "v6util.h" #include "v6util.h"
#include "msg.h" #include "msg.h"
static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
static const char *TEST_CALLBACK_TEXT = "callback_text"; static const char *TEST_CALLBACK_TEXT = "callback_text";
static TVITEMA g_item_expanding, g_item_expanded; static TVITEMA g_item_expanding, g_item_expanded;
...@@ -2666,27 +2667,28 @@ static void test_right_click(void) ...@@ -2666,27 +2667,28 @@ static void test_right_click(void)
DestroyWindow(hTree); DestroyWindow(hTree);
} }
static void init_functions(void)
{
HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
X(InitCommonControlsEx);
#undef X
}
START_TEST(treeview) START_TEST(treeview)
{ {
HMODULE hComctl32; INITCOMMONCONTROLSEX iccex;
BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); ULONG_PTR ctx_cookie;
HANDLE hCtx;
WNDCLASSA wc; WNDCLASSA wc;
MSG msg; MSG msg;
ULONG_PTR ctx_cookie; init_functions();
HANDLE hCtx;
iccex.dwSize = sizeof(iccex);
hComctl32 = GetModuleHandleA("comctl32.dll"); iccex.dwICC = ICC_TREEVIEW_CLASSES;
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); pInitCommonControlsEx(&iccex);
if (pInitCommonControlsEx)
{
INITCOMMONCONTROLSEX iccex;
iccex.dwSize = sizeof(iccex);
iccex.dwICC = ICC_TREEVIEW_CLASSES;
pInitCommonControlsEx(&iccex);
}
else
InitCommonControls();
init_msg_sequences(sequences, NUM_MSG_SEQUENCES); init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
init_msg_sequences(item_sequence, 1); init_msg_sequences(item_sequence, 1);
......
...@@ -63,6 +63,8 @@ ...@@ -63,6 +63,8 @@
static HWND parent_wnd, g_edit; static HWND parent_wnd, g_edit;
static HWND (WINAPI *pCreateUpDownControl)(DWORD, INT, INT, INT, INT,
HWND, INT, HINSTANCE, HWND, INT, INT, INT);
static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR); static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
...@@ -882,7 +884,7 @@ static void test_CreateUpDownControl(void) ...@@ -882,7 +884,7 @@ static void test_CreateUpDownControl(void)
RECT rect; RECT rect;
GetClientRect(parent_wnd, &rect); GetClientRect(parent_wnd, &rect);
updown = CreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE, updown = pCreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE,
0, 0, rect.right, rect.bottom, parent_wnd, 1, GetModuleHandleA(NULL), g_edit, 100, 10, 50); 0, 0, rect.right, rect.bottom, parent_wnd, 1, GetModuleHandleA(NULL), g_edit, 100, 10, 50);
ok(updown != NULL, "Failed to create control.\n"); ok(updown != NULL, "Failed to create control.\n");
...@@ -898,13 +900,22 @@ static void test_CreateUpDownControl(void) ...@@ -898,13 +900,22 @@ static void test_CreateUpDownControl(void)
DestroyWindow(updown); DestroyWindow(updown);
} }
START_TEST(updown) static void init_functions(void)
{ {
HMODULE mod = GetModuleHandleA("comctl32.dll"); HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
X(CreateUpDownControl);
X2(SetWindowSubclass, 410);
#undef X
#undef X2
}
pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410); START_TEST(updown)
{
init_functions();
InitCommonControls();
init_msg_sequences(sequences, NUM_MSG_SEQUENCES); init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
parent_wnd = create_parent_window(); parent_wnd = create_parent_window();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment