ReactOS  0.4.15-dev-316-g938df97
rebar.c File Reference
#include <assert.h>
#include <stdarg.h>
#include <windows.h>
#include <commctrl.h>
#include <uxtheme.h>
#include "wine/heap.h"
#include "wine/test.h"
Include dependency graph for rebar.c:

Go to the source code of this file.

Classes

struct  rbband_result_t
 
struct  rbsize_result_t
 
struct  rbresize_test_result_t
 

Macros

#define check_rect(name, val, exp)
 
#define check_rect_no_top(name, val, exp)
 
#define compare(val, exp, format)   ok((val) == (exp), #val " value " format " expected " format "\n", (val), (exp));
 
#define expect_eq(line, expr, value, type, format)
 
#define rbsize_results_num   27
 
#define check_sizes_todo(todomask)
 
#define check_sizes()   check_sizes_todo(0)
 
#define comment(fmt, arg1)
 
#define check_client()
 
#define expect_band_content(hRebar, uBand, fStyle, clrFore, clrBack, lpText, iImage, hwndChild, cxMinChild, cyMinChild, cx, hbmBack, wID, cyChild, cyMaxChild, cyIntegral, cxIdeal, lParam, cxHeader, cxHeader_broken)
 
#define X(f)   p##f = (void*)GetProcAddress(hComCtl32, #f);
 

Functions

static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST)
 
static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE
 
static INT CALLBACK is_font_installed_proc (const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
 
static BOOL is_font_installed (const char *name)
 
static void init_system_font_height (void)
 
static HWND create_rebar_control (void)
 
static HWND build_toolbar (int nr, HWND hParent)
 
static LRESULT CALLBACK parent_wndproc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static int string_width (const CHAR *s)
 
static rbsize_result_t rbsize_init (int cleft, int ctop, int cright, int cbottom, int cyBarHeight, int nRows, int nBands)
 
static void rbsize_add_row (rbsize_result_t *rbsr, int rowHeight)
 
static void rbsize_add_band (rbsize_result_t *rbsr, int left, int top, int right, int bottom, DWORD fStyle, UINT cx)
 
static void rbsize_results_init (void)
 
static void rbsize_results_free (void)
 
static void add_band_w (HWND hRebar, LPCSTR lpszText, int cxMinChild, int cx, int cxIdeal)
 
static void test_layout (void)
 
static void test_resize (void)
 
static void expect_band_content_ (int line, HWND hRebar, UINT uBand, INT fStyle, COLORREF clrFore, COLORREF clrBack, LPCSTR lpText, int iImage, HWND hwndChild, INT cxMinChild, INT cyMinChild, INT cx, HBITMAP hbmBack, INT wID, INT cyChild, INT cyMaxChild, INT cyIntegral, INT cxIdeal, LPARAM lParam, UINT cxHeader, UINT cxHeader_broken)
 
static void test_bandinfo (void)
 
static void test_colors (void)
 
static BOOL register_parent_wnd_class (void)
 
static HWND create_parent_window (void)
 
static void test_showband (void)
 
static void test_notification (void)
 
static void init_functions (void)
 
 START_TEST (rebar)
 

Variables

static LPCSTR
 
static int
 
static COLORREF
 
static UINT
 
static RECT height_change_notify_rect
 
static HWND hMainWnd
 
static int system_font_height
 
static int g_parent_measureitem
 
static rbsize_result_trbsize_results
 
static int rbsize_numtests = 0
 
static const rbresize_test_result_t resize_results []
 
static DWORD resize_numtests = 0
 

Macro Definition Documentation

◆ check_client

#define check_client ( )
Value:
{ \
RECT r; \
int value; \
GetWindowRect(hRebar, &r); \
MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); \
check_rect_no_top("client", r, res->rc); /* the top coordinate changes after every layout and is very implementation-dependent */ \
} else { \
check_rect("client", r, res->rc); \
} \
value = (int)SendMessageA(hRebar, RB_GETROWCOUNT, 0, 0); \
ok(res->iNumRows == value, "RB_GETROWCOUNT expected %d got %d\n", res->iNumRows, value); \
if (res->heightNotify) { \
RECT rcClient; \
GetClientRect(hRebar, &rcClient); \
check_rect("notify", height_change_notify_rect, rcClient); \
} else ok(height_change_notify_rect.top == -1, "Unexpected RBN_HEIGHTCHANGE received\n"); \
SetRect(&height_change_notify_rect, -1, -1, -1, -1); \
}
static HWND hMainWnd
Definition: rebar.c:34
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
LONG top
Definition: windef.h:307
static RECT height_change_notify_rect
Definition: rebar.c:33
#define CCS_NODIVIDER
Definition: commctrl.h:2244
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2242
#define RB_GETROWCOUNT
Definition: commctrl.h:1582
GLsizei const GLfloat * value
Definition: glext.h:6069
static DWORD resize_numtests
Definition: rebar.c:818
#define ARRAY_SIZE(a)
Definition: main.h:24
static int
Definition: rebar.c:31
#define ok(value,...)
Definition: atltest.h:57
static const rbresize_test_result_t resize_results[]
Definition: rebar.c:697
#define HWND_DESKTOP
Definition: winuser.h:1195
GLuint res
Definition: glext.h:9613

Definition at line 821 of file rebar.c.

◆ check_rect

#define check_rect (   name,
  val,
  exp 
)
Value:
"invalid rect (" name ") %s - expected %s\n", wine_dbgstr_rect(&val), wine_dbgstr_rect(&exp));
GLuint GLfloat * val
Definition: glext.h:7180
const char * wine_dbgstr_rect(const RECT *rect)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
#define ok(value,...)
Definition: atltest.h:57
DWORD exp
Definition: msg.c:16033
Definition: name.c:38

Definition at line 38 of file rebar.c.

◆ check_rect_no_top

#define check_rect_no_top (   name,
  val,
  exp 
)
Value:
{ \
ok((val.bottom - val.top == exp.bottom - exp.top) && \
val.left == exp.left && val.right == exp.right, \
"invalid rect (" name ") %s - expected %s, ignoring top\n", \
GLuint GLfloat * val
Definition: glext.h:7180
const char * wine_dbgstr_rect(const RECT *rect)
DWORD exp
Definition: msg.c:16033
Definition: name.c:38

Definition at line 41 of file rebar.c.

◆ check_sizes

#define check_sizes ( )    check_sizes_todo(0)

Definition at line 470 of file rebar.c.

◆ check_sizes_todo

#define check_sizes_todo (   todomask)
Value:
{ \
RECT rc; \
REBARBANDINFOA rbi; \
int count, i/*, mask=(todomask)*/; \
GetClientRect(hRebar, &rc); \
check_rect("client", rc, res->rcClient); \
count = SendMessageA(hRebar, RB_GETROWCOUNT, 0, 0); \
compare(count, res->nRows, "%d"); \
for (i=0; i<min(count, res->nRows); i++) { \
int height = SendMessageA(hRebar, RB_GETROWHEIGHT, 0, 0);\
ok(height == res->cyRowHeights[i], "Height mismatch for row %d - %d vs %d\n", i, res->cyRowHeights[i], height); \
} \
count = SendMessageA(hRebar, RB_GETBANDCOUNT, 0, 0); \
compare(count, res->nBands, "%d"); \
for (i=0; i<min(count, res->nBands); i++) { \
ok(SendMessageA(hRebar, RB_GETRECT, i, (LPARAM)&rc) == 1, "RB_GETRECT\n"); \
if (!(res->bands[i].fStyle & RBBS_HIDDEN)) \
check_rect("band", rc, res->bands[i].rc); \
rbi.cbSize = REBARBANDINFOA_V6_SIZE; \
rbi.fMask = RBBIM_STYLE | RBBIM_SIZE; \
ok(SendMessageA(hRebar, RB_GETBANDINFOA, i, (LPARAM)&rbi) == 1, "RB_GETBANDINFOA\n"); \
compare(rbi.fStyle, res->bands[i].fStyle, "%x"); \
compare(rbi.cx, res->bands[i].cx, "%d"); \
} \
rbsize_numtests++; \
}
#define RB_GETROWHEIGHT
Definition: commctrl.h:1583
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define RBBIM_STYLE
Definition: commctrl.h:1498
#define RBBIM_SIZE
Definition: commctrl.h:1504
#define RB_GETRECT
Definition: commctrl.h:1578
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define RB_GETBANDINFOA
Definition: commctrl.h:1606
#define RB_GETBANDCOUNT
Definition: commctrl.h:1581
LONG_PTR LPARAM
Definition: windef.h:208
static rbsize_result_t * rbsize_results
Definition: rebar.c:240
#define RB_GETROWCOUNT
Definition: commctrl.h:1582
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
static int rbsize_numtests
Definition: rebar.c:440
#define RBBS_HIDDEN
Definition: commctrl.h:1488
#define min(a, b)
Definition: monoChain.cc:55
GLuint res
Definition: glext.h:9613
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537

Definition at line 442 of file rebar.c.

◆ comment

#define comment (   fmt,
  arg1 
)

Definition at line 820 of file rebar.c.

◆ compare

#define compare (   val,
  exp,
  format 
)    ok((val) == (exp), #val " value " format " expected " format "\n", (val), (exp));

Definition at line 47 of file rebar.c.

◆ expect_band_content

#define expect_band_content (   hRebar,
  uBand,
  fStyle,
  clrFore,
  clrBack,
  lpText,
  iImage,
  hwndChild,
  cxMinChild,
  cyMinChild,
  cx,
  hbmBack,
  wID,
  cyChild,
  cyMaxChild,
  cyIntegral,
  cxIdeal,
  lParam,
  cxHeader,
  cxHeader_broken 
)
Value:
expect_band_content_(__LINE__, hRebar, uBand, fStyle, clrFore, clrBack,\
lpText, iImage, hwndChild, cxMinChild, cyMinChild, cx, hbmBack, wID,\
cyChild, cyMaxChild, cyIntegral, cxIdeal, lParam, cxHeader, cxHeader_broken)
static void expect_band_content_(int line, HWND hRebar, UINT uBand, INT fStyle, COLORREF clrFore, COLORREF clrBack, LPCSTR lpText, int iImage, HWND hwndChild, INT cxMinChild, INT cyMinChild, INT cx, HBITMAP hbmBack, INT wID, INT cyChild, INT cyMaxChild, INT cyIntegral, INT cxIdeal, LPARAM lParam, UINT cxHeader, UINT cxHeader_broken)
Definition: rebar.c:898
_Out_opt_ int * cx
Definition: commctrl.h:581
LPARAM lParam
Definition: combotst.c:139

Definition at line 936 of file rebar.c.

◆ expect_eq

#define expect_eq (   line,
  expr,
  value,
  type,
  format 
)
Value:
{ type ret = expr;\
ok((value) == ret, #expr " expected " format " got " format " from line %d\n", (value), (ret), line); }
LOCAL int expr(arg_t *ap, int *altp)
Definition: match.c:512
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: query.h:86
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: parser.c:48
int ret

Definition at line 49 of file rebar.c.

◆ rbsize_results_num

#define rbsize_results_num   27

Definition at line 242 of file rebar.c.

◆ X

#define X (   f)    p##f = (void*)GetProcAddress(hComCtl32, #f);

Function Documentation

◆ add_band_w()

static void add_band_w ( HWND  hRebar,
LPCSTR  lpszText,
int  cxMinChild,
int  cx,
int  cxIdeal 
)
static

Definition at line 474 of file rebar.c.

475 {
477  REBARBANDINFOA rbi;
478 
479  if (lpszText != NULL)
480  strcpy(buffer, lpszText);
483  rbi.cx = cx;
484  rbi.cxMinChild = cxMinChild;
485  rbi.cxIdeal = cxIdeal;
486  rbi.cyMinChild = 20;
487  rbi.hwndChild = build_toolbar(1, hRebar);
488  rbi.lpText = (lpszText ? buffer : NULL);
489  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
490 }
#define RBBIM_CHILD
Definition: commctrl.h:1502
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
char CHAR
Definition: xmlstorage.h:175
GLuint buffer
Definition: glext.h:5915
#define RBBIM_SIZE
Definition: commctrl.h:1504
#define RB_INSERTBANDA
Definition: commctrl.h:1571
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define RBBIM_TEXT
Definition: commctrl.h:1500
#define MAX_PATH
Definition: compat.h:26
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1503
static HWND build_toolbar(int nr, HWND hParent)
Definition: rebar.c:93
_Out_opt_ int * cx
Definition: commctrl.h:581
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537
#define RBBIM_IDEALSIZE
Definition: commctrl.h:1507

Referenced by test_colors(), test_layout(), and test_resize().

◆ BOOL()

static BOOL ( WINAPI pImageList_Destroy)
static

◆ build_toolbar()

static HWND build_toolbar ( int  nr,
HWND  hParent 
)
static

Definition at line 93 of file rebar.c.

94 {
95  TBBUTTON btns[8];
98  int iBitmapId = 0;
99  int i;
100 
101  ok(hToolbar != NULL, "Toolbar creation problem\n");
102  ok(SendMessageA(hToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0) == 0, "TB_BUTTONSTRUCTSIZE failed\n");
103  ok(SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0) == 0, "TB_AUTOSIZE failed\n");
104  ok(SendMessageA(hToolbar, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0)==1, "WM_SETFONT\n");
105 
106  for (i=0; i<5+nr; i++)
107  {
108  btns[i].iBitmap = i;
109  btns[i].idCommand = i;
110  btns[i].fsStyle = BTNS_BUTTON;
111  btns[i].fsState = TBSTATE_ENABLED;
112  btns[i].iString = 0;
113  }
114 
115  switch (nr)
116  {
117  case 0: iBitmapId = IDB_HIST_SMALL_COLOR; break;
118  case 1: iBitmapId = IDB_VIEW_SMALL_COLOR; break;
119  case 2: iBitmapId = IDB_STD_SMALL_COLOR; break;
120  }
121  ok(SendMessageA(hToolbar, TB_LOADIMAGES, iBitmapId, (LPARAM)HINST_COMMCTRL) == 0, "TB_LOADIMAGES failed\n");
122  ok(SendMessageA(hToolbar, TB_ADDBUTTONSA, 5+nr, (LPARAM)btns), "TB_ADDBUTTONSA failed\n");
123  return hToolbar;
124 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define TB_BUTTONSTRUCTSIZE
Definition: commctrl.h:1130
ULONG nr
Definition: thread.c:7
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDB_STD_SMALL_COLOR
Definition: commctrl.h:1060
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
BYTE fsStyle
Definition: commctrl.h:948
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define BTNS_BUTTON
Definition: commctrl.h:994
#define TB_AUTOSIZE
Definition: commctrl.h:1133
smooth NULL
Definition: ftsmooth.c:416
#define SYSTEM_FONT
Definition: wingdi.h:910
LONG_PTR LPARAM
Definition: windef.h:208
INT_PTR iString
Definition: commctrl.h:955
int iBitmap
Definition: commctrl.h:945
#define IDB_VIEW_SMALL_COLOR
Definition: commctrl.h:1062
#define CCS_NORESIZE
Definition: commctrl.h:2241
int idCommand
Definition: commctrl.h:946
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
#define TOOLBARCLASSNAMEA
Definition: commctrl.h:940
#define TB_LOADIMAGES
Definition: commctrl.h:1148
#define ok(value,...)
Definition: atltest.h:57
#define TB_ADDBUTTONSA
Definition: commctrl.h:1102
#define WM_SETFONT
Definition: winuser.h:1632
#define HINST_COMMCTRL
Definition: commctrl.h:1059
#define TBSTATE_ENABLED
Definition: commctrl.h:970
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR 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)
BYTE fsState
Definition: commctrl.h:947
#define IDB_HIST_SMALL_COLOR
Definition: commctrl.h:1064
#define WS_VISIBLE
Definition: pedump.c:620
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60

Referenced by add_band_w(), and test_layout().

◆ create_parent_window()

static HWND create_parent_window ( void  )
static

Definition at line 1069 of file rebar.c.

1070 {
1071  HWND hwnd;
1072 
1073  if (!register_parent_wnd_class()) return NULL;
1074 
1075  hwnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW,
1078  NULL, NULL, GetModuleHandleA(NULL), 0);
1079 
1081  return hwnd;
1082 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static BOOL register_parent_wnd_class(void)
Definition: rebar.c:1051
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define CW_USEDEFAULT
Definition: winuser.h:225
smooth NULL
Definition: ftsmooth.c:416
#define SM_CYSIZEFRAME
Definition: winuser.h:985
#define SW_SHOW
Definition: winuser.h:769
#define SM_CXSIZEFRAME
Definition: winuser.h:983
#define SM_CYCAPTION
Definition: winuser.h:953
int WINAPI GetSystemMetrics(_In_ int)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR 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)
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637

Referenced by START_TEST().

◆ create_rebar_control()

static HWND create_rebar_control ( void  )
static

Definition at line 80 of file rebar.c.

81 {
82  HWND hwnd;
83 
86  ok(hwnd != NULL, "Failed to create Rebar\n");
87 
89 
90  return hwnd;
91 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define REBARCLASSNAMEA
Definition: commctrl.h:1460
static HWND hMainWnd
Definition: rebar.c:34
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4290
smooth NULL
Definition: ftsmooth.c:416
#define SYSTEM_FONT
Definition: wingdi.h:910
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
#define ok(value,...)
Definition: atltest.h:57
#define WM_SETFONT
Definition: winuser.h:1632
#define WS_VISIBLE
Definition: pedump.c:620
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60

Referenced by test_bandinfo(), test_colors(), test_layout(), test_notification(), and test_showband().

◆ expect_band_content_()

static void expect_band_content_ ( int  line,
HWND  hRebar,
UINT  uBand,
INT  fStyle,
COLORREF  clrFore,
COLORREF  clrBack,
LPCSTR  lpText,
int  iImage,
HWND  hwndChild,
INT  cxMinChild,
INT  cyMinChild,
INT  cx,
HBITMAP  hbmBack,
INT  wID,
INT  cyChild,
INT  cyMaxChild,
INT  cyIntegral,
INT  cxIdeal,
LPARAM  lParam,
UINT  cxHeader,
UINT  cxHeader_broken 
)
static

Definition at line 898 of file rebar.c.

903 {
904  CHAR buf[MAX_PATH] = "abc";
905  REBARBANDINFOA rb;
906 
907  memset(&rb, 0xdd, sizeof(rb));
912  rb.lpText = buf;
913  rb.cch = MAX_PATH;
914  ok(SendMessageA(hRebar, RB_GETBANDINFOA, uBand, (LPARAM)&rb), "RB_GETBANDINFOA failed from line %d\n", line);
915  expect_eq(line, rb.fStyle, fStyle, int, "%x");
916  expect_eq(line, rb.clrFore, clrFore, COLORREF, "%x");
917  expect_eq(line, rb.clrBack, clrBack, COLORREF, "%x");
918  expect_eq(line, strcmp(rb.lpText, lpText), 0, int, "%d");
919  expect_eq(line, rb.iImage, iImage, int, "%x");
920  expect_eq(line, rb.hwndChild, hwndChild, HWND, "%p");
921  expect_eq(line, rb.cxMinChild, cxMinChild, int, "%d");
922  expect_eq(line, rb.cyMinChild, cyMinChild, int, "%d");
923  expect_eq(line, rb.cx, cx, int, "%d");
924  expect_eq(line, rb.hbmBack, hbmBack, HBITMAP, "%p");
925  expect_eq(line, rb.wID, wID, int, "%d");
926  /* the values of cyChild, cyMaxChild and cyIntegral can't be read unless the band is RBBS_VARIABLEHEIGHT */
927  expect_eq(line, rb.cyChild, cyChild, int, "%x");
928  expect_eq(line, rb.cyMaxChild, cyMaxChild, int, "%x");
929  expect_eq(line, rb.cyIntegral, cyIntegral, int, "%x");
930  expect_eq(line, rb.cxIdeal, cxIdeal, int, "%d");
931  expect_eq(line, rb.lParam, lParam, LPARAM, "%ld");
932  ok(rb.cxHeader == cxHeader || rb.cxHeader == cxHeader + 1 || broken(rb.cxHeader == cxHeader_broken),
933  "expected %d for %d from line %d\n", cxHeader, rb.cxHeader, line);
934 }
#define RBBIM_CHILD
Definition: commctrl.h:1502
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
char CHAR
Definition: xmlstorage.h:175
#define RBBIM_HEADERSIZE
Definition: commctrl.h:1509
COLORREF clrBack
Definition: commctrl.h:1516
#define RBBIM_ID
Definition: commctrl.h:1506
#define RBBIM_LPARAM
Definition: commctrl.h:1508
#define RBBIM_IMAGE
Definition: commctrl.h:1501
#define RBBIM_STYLE
Definition: commctrl.h:1498
#define RBBIM_SIZE
Definition: commctrl.h:1504
#define RB_GETBANDINFOA
Definition: commctrl.h:1606
LONG_PTR LPARAM
Definition: windef.h:208
Definition: parser.c:48
#define RBBIM_COLORS
Definition: commctrl.h:1499
#define RBBIM_TEXT
Definition: commctrl.h:1500
DWORD COLORREF
Definition: windef.h:300
#define MAX_PATH
Definition: compat.h:26
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1503
#define broken(x)
Definition: _sntprintf.h:21
COLORREF clrFore
Definition: commctrl.h:1515
#define expect_eq(line, expr, value, type, format)
Definition: rebar.c:49
#define ok(value,...)
Definition: atltest.h:57
_Out_opt_ int * cx
Definition: commctrl.h:581
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static HBITMAP
Definition: button.c:44
#define memset(x, y, z)
Definition: compat.h:39
LPARAM lParam
Definition: combotst.c:139
#define RBBIM_IDEALSIZE
Definition: commctrl.h:1507
#define RBBIM_BACKGROUND
Definition: commctrl.h:1505

◆ HIMAGELIST()

static HIMAGELIST ( WINAPI pImageList_LoadImageA)
static

◆ init_functions()

static void init_functions ( void  )
static

Definition at line 1128 of file rebar.c.

1129 {
1130  HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
1131 
1132 #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
1135 #undef X
1136 }
HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE hi, LPCSTR lpbmp, INT cx, INT cGrow, COLORREF clrMask, UINT uType, UINT uFlags)
Definition: imagelist.c:2164
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define X(f)

Referenced by START_TEST().

◆ init_system_font_height()

static void init_system_font_height ( void  )
static

Definition at line 69 of file rebar.c.

69  {
70  HDC hDC;
72 
75  DeleteDC(NULL);
76 
77  system_font_height = tm.tmHeight;
78 }
static int system_font_height
Definition: rebar.c:35
static HDC
Definition: imagelist.c:92
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI GetTextMetricsA(_In_ HDC, _Out_ LPTEXTMETRICA)
Definition: text.c:200
Definition: time.h:76
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI DeleteDC(_In_ HDC)

Referenced by START_TEST().

◆ is_font_installed()

static BOOL is_font_installed ( const char name)
static

Definition at line 57 of file rebar.c.

58 {
59  HDC hdc = GetDC(0);
60  BOOL ret = FALSE;
61 
63  ret = TRUE;
64 
65  ReleaseDC(0, hdc);
66  return ret;
67 }
#define TRUE
Definition: types.h:120
HDC WINAPI GetDC(_In_opt_ HWND)
static HDC
Definition: imagelist.c:92
unsigned int BOOL
Definition: ntddk_ex.h:94
int WINAPI EnumFontFamiliesA(_In_ HDC, _In_opt_ LPCSTR, _In_ FONTENUMPROCA, _In_ LPARAM)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
int ret
HDC hdc
Definition: main.c:9
Definition: name.c:38
static INT CALLBACK is_font_installed_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
Definition: rebar.c:52

Referenced by START_TEST().

◆ is_font_installed_proc()

static INT CALLBACK is_font_installed_proc ( const LOGFONTA elf,
const TEXTMETRICA ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 52 of file rebar.c.

53 {
54  return 0;
55 }

Referenced by is_font_installed().

◆ parent_wndproc()

static LRESULT CALLBACK parent_wndproc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 128 of file rebar.c.

129 {
130  switch (msg)
131  {
132  case WM_NOTIFY:
133  {
134  NMHDR *lpnm = (NMHDR *)lParam;
135  if (lpnm->code == RBN_HEIGHTCHANGE)
137  }
138  break;
139  case WM_MEASUREITEM:
141  break;
142  }
143  return DefWindowProcA(hWnd, msg, wParam, lParam);
144 }
#define RBN_HEIGHTCHANGE
Definition: commctrl.h:1624
HWND hWnd
Definition: settings.c:17
static RECT height_change_notify_rect
Definition: rebar.c:33
WPARAM wParam
Definition: combotst.c:138
UINT code
Definition: winuser.h:3134
#define WM_MEASUREITEM
Definition: winuser.h:1628
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND hwndFrom
Definition: winuser.h:3132
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define msg(x)
Definition: auth_time.c:54
static int g_parent_measureitem
Definition: rebar.c:126
LPARAM lParam
Definition: combotst.c:139
#define WM_NOTIFY
Definition: richedit.h:61

Referenced by register_parent_wnd_class().

◆ rbsize_add_band()

static void rbsize_add_band ( rbsize_result_t rbsr,
int  left,
int  top,
int  right,
int  bottom,
DWORD  fStyle,
UINT  cx 
)
static

Definition at line 232 of file rebar.c.

233 {
234  SetRect(&(rbsr->bands[rbsr->nBands].rc), left, top, right, bottom);
235  rbsr->bands[rbsr->nBands].fStyle = fStyle;
236  rbsr->bands[rbsr->nBands].cx = cx;
237  rbsr->nBands++;
238 }
rbband_result_t * bands
Definition: rebar.c:210
GLint GLint bottom
Definition: glext.h:7726
GLint left
Definition: glext.h:7726
GLdouble GLdouble right
Definition: glext.h:10859
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
DWORD fStyle
Definition: rebar.c:200
_Out_opt_ int * cx
Definition: commctrl.h:581
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859

Referenced by rbsize_results_init().

◆ rbsize_add_row()

static void rbsize_add_row ( rbsize_result_t rbsr,
int  rowHeight 
)
static

Definition at line 227 of file rebar.c.

227  {
228  rbsr->cyRowHeights[rbsr->nRows] = rowHeight;
229  rbsr->nRows++;
230 }
int * cyRowHeights
Definition: rebar.c:208

Referenced by rbsize_results_init().

◆ rbsize_init()

static rbsize_result_t rbsize_init ( int  cleft,
int  ctop,
int  cright,
int  cbottom,
int  cyBarHeight,
int  nRows,
int  nBands 
)
static

Definition at line 213 of file rebar.c.

214 {
216 
217  SetRect(&ret.rcClient, cleft, ctop, cright, cbottom);
218  ret.cyBarHeight = cyBarHeight;
219  ret.nRows = 0;
220  ret.cyRowHeights = heap_alloc_zero(nRows * sizeof(int));
221  ret.nBands = 0;
222  ret.bands = heap_alloc_zero(nBands * sizeof(*ret.bands));
223 
224  return ret;
225 }
int ret
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
int nRows
Definition: appswitch.c:56

Referenced by rbsize_results_init().

◆ rbsize_results_free()

static void rbsize_results_free ( void  )
static

Definition at line 428 of file rebar.c.

429 {
430  int i;
431 
432  for (i = 0; i < rbsize_results_num; i++) {
433  heap_free(rbsize_results[i].cyRowHeights);
434  heap_free(rbsize_results[i].bands);
435  }
438 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
static rbsize_result_t * rbsize_results
Definition: rebar.c:240
#define rbsize_results_num
Definition: rebar.c:242
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by test_layout().

◆ rbsize_results_init()

static void rbsize_results_init ( void  )
static

Definition at line 244 of file rebar.c.

245 {
247 
248  rbsize_results[0] = rbsize_init(0, 0, 672, 0, 0, 0, 0);
249 
250  rbsize_results[1] = rbsize_init(0, 0, 672, 4, 4, 1, 1);
252  rbsize_add_band(&rbsize_results[1], 0, 0, 672, 4, 0x00, 200);
253 
254  rbsize_results[2] = rbsize_init(0, 0, 672, 4, 4, 1, 2);
256  rbsize_add_band(&rbsize_results[2], 0, 0, 200, 4, 0x00, 200);
257  rbsize_add_band(&rbsize_results[2], 200, 0, 672, 4, 0x04, 200);
258 
259  rbsize_results[3] = rbsize_init(0, 0, 672, 30, 30, 1, 3);
261  rbsize_add_band(&rbsize_results[3], 0, 0, 200, 30, 0x00, 200);
262  rbsize_add_band(&rbsize_results[3], 200, 0, 400, 30, 0x04, 200);
263  rbsize_add_band(&rbsize_results[3], 400, 0, 672, 30, 0x00, 200);
264 
265  rbsize_results[4] = rbsize_init(0, 0, 672, 34, 34, 1, 4);
267  rbsize_add_band(&rbsize_results[4], 0, 0, 200, 34, 0x00, 200);
268  rbsize_add_band(&rbsize_results[4], 200, 0, 400, 34, 0x04, 200);
269  rbsize_add_band(&rbsize_results[4], 400, 0, 604, 34, 0x00, 200);
270  rbsize_add_band(&rbsize_results[4], 604, 0, 672, 34, 0x04, 68);
271 
272  rbsize_results[5] = rbsize_init(0, 0, 672, 34, 34, 1, 4);
274  rbsize_add_band(&rbsize_results[5], 0, 0, 200, 34, 0x00, 200);
275  rbsize_add_band(&rbsize_results[5], 200, 0, 400, 34, 0x04, 200);
276  rbsize_add_band(&rbsize_results[5], 400, 0, 604, 34, 0x00, 200);
277  rbsize_add_band(&rbsize_results[5], 604, 0, 672, 34, 0x04, 68);
278 
279  rbsize_results[6] = rbsize_init(0, 0, 672, 34, 34, 1, 4);
281  rbsize_add_band(&rbsize_results[6], 0, 0, 200, 34, 0x00, 200);
282  rbsize_add_band(&rbsize_results[6], 202, 0, 402, 34, 0x04, 200);
283  rbsize_add_band(&rbsize_results[6], 404, 0, 604, 34, 0x00, 200);
284  rbsize_add_band(&rbsize_results[6], 606, 0, 672, 34, 0x04, 66);
285 
286  rbsize_results[7] = rbsize_init(0, 0, 672, 70, 70, 2, 5);
289  rbsize_add_band(&rbsize_results[7], 0, 0, 142, 34, 0x00, 200);
290  rbsize_add_band(&rbsize_results[7], 144, 0, 557, 34, 0x00, 200);
291  rbsize_add_band(&rbsize_results[7], 559, 0, 672, 34, 0x04, 200);
292  rbsize_add_band(&rbsize_results[7], 0, 36, 200, 70, 0x00, 200);
293  rbsize_add_band(&rbsize_results[7], 202, 36, 672, 70, 0x04, 66);
294 
295  rbsize_results[8] = rbsize_init(0, 0, 672, 34, 34, 1, 5);
297  rbsize_add_band(&rbsize_results[8], 0, 0, 167, 34, 0x00, 200);
298  rbsize_add_band(&rbsize_results[8], 169, 0, 582, 34, 0x00, 200);
299  rbsize_add_band(&rbsize_results[8], 559, 0, 759, 34, 0x08, 200);
300  rbsize_add_band(&rbsize_results[8], 584, 0, 627, 34, 0x00, 200);
301  rbsize_add_band(&rbsize_results[8], 629, 0, 672, 34, 0x04, 66);
302 
303  rbsize_results[9] = rbsize_init(0, 0, 672, 34, 34, 1, 4);
305  rbsize_add_band(&rbsize_results[9], 0, 0, 167, 34, 0x00, 200);
306  rbsize_add_band(&rbsize_results[9], 169, 0, 582, 34, 0x00, 200);
307  rbsize_add_band(&rbsize_results[9], 584, 0, 627, 34, 0x00, 200);
308  rbsize_add_band(&rbsize_results[9], 629, 0, 672, 34, 0x04, 66);
309 
310  rbsize_results[10] = rbsize_init(0, 0, 672, 34, 34, 1, 3);
311  rbsize_add_row(&rbsize_results[10], 34);
312  rbsize_add_band(&rbsize_results[10], 0, 0, 413, 34, 0x00, 200);
313  rbsize_add_band(&rbsize_results[10], 415, 0, 615, 34, 0x00, 200);
314  rbsize_add_band(&rbsize_results[10], 617, 0, 672, 34, 0x04, 66);
315 
316  rbsize_results[11] = rbsize_init(0, 0, 672, 34, 34, 1, 2);
317  rbsize_add_row(&rbsize_results[11], 34);
318  rbsize_add_band(&rbsize_results[11], 0, 0, 604, 34, 0x00, 200);
319  rbsize_add_band(&rbsize_results[11], 606, 0, 672, 34, 0x04, 66);
320 
321  rbsize_results[12] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
324  rbsize_add_band(&rbsize_results[12], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
325  rbsize_add_band(&rbsize_results[12], 87 + string_width("ABC"), 0, 157 + string_width("ABC"), 4 + system_font_height, 0x00, 70);
326  rbsize_add_band(&rbsize_results[12], 157 + string_width("ABC"), 0, 397 + string_width("ABC"), 4 + system_font_height, 0x00, 240);
327  rbsize_add_band(&rbsize_results[12], 397 + string_width("ABC"), 0, 672, 4 + system_font_height, 0x00, 60);
328  rbsize_add_band(&rbsize_results[12], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
329 
330  rbsize_results[13] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
333  rbsize_add_band(&rbsize_results[13], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
334  rbsize_add_band(&rbsize_results[13], 87 + string_width("ABC"), 0, 200 + string_width("ABC"), 4 + system_font_height, 0x00, 113);
335  rbsize_add_band(&rbsize_results[13], 200 + string_width("ABC"), 0, 397 + string_width("ABC"), 4 + system_font_height, 0x00, 197);
336  rbsize_add_band(&rbsize_results[13], 397 + string_width("ABC"), 0, 672, 4 + system_font_height, 0x00, 60);
337  rbsize_add_band(&rbsize_results[13], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
338 
339  rbsize_results[14] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
342  rbsize_add_band(&rbsize_results[14], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
343  rbsize_add_band(&rbsize_results[14], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
344  rbsize_add_band(&rbsize_results[14], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 183);
345  rbsize_add_band(&rbsize_results[14], 595 - string_width("MMMMMMM"), 0, 672, 4 + system_font_height, 0x00, 77 + string_width("MMMMMMM"));
346  rbsize_add_band(&rbsize_results[14], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
347 
348  rbsize_results[15] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
351  rbsize_add_band(&rbsize_results[15], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
352  rbsize_add_band(&rbsize_results[15], 87 + string_width("ABC"), 0, 140 + string_width("ABC"), 4 + system_font_height, 0x00, 53);
353  rbsize_add_band(&rbsize_results[15], 140 + string_width("ABC"), 0, 595 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 455 - string_width("MMMMMMM") - string_width("ABC"));
354  rbsize_add_band(&rbsize_results[15], 595 - string_width("MMMMMMM"), 0, 672, 4 + system_font_height, 0x00, 77 + string_width("MMMMMMM"));
355  rbsize_add_band(&rbsize_results[15], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
356 
357  rbsize_results[16] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
360  rbsize_add_band(&rbsize_results[16], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
361  rbsize_add_band(&rbsize_results[16], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
362  rbsize_add_band(&rbsize_results[16], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 183);
363  rbsize_add_band(&rbsize_results[16], 595 - string_width("MMMMMMM"), 0, 672, 4 + system_font_height, 0x00, 77 + string_width("MMMMMMM"));
364  rbsize_add_band(&rbsize_results[16], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
365 
366  rbsize_results[17] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
369  rbsize_add_band(&rbsize_results[17], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
370  rbsize_add_band(&rbsize_results[17], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
371  rbsize_add_band(&rbsize_results[17], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 183);
372  rbsize_add_band(&rbsize_results[17], 595 - string_width("MMMMMMM"), 0, 672, 4 + system_font_height, 0x00, 77 + string_width("MMMMMMM"));
373  rbsize_add_band(&rbsize_results[17], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
374 
375  rbsize_results[18] = rbsize_init(0, 0, 672, 56, 56, 2, 5);
376  rbsize_add_row(&rbsize_results[18], 28);
377  rbsize_add_row(&rbsize_results[18], 28);
378  rbsize_add_band(&rbsize_results[18], 0, 0, 87 + string_width("ABC"), 28, 0x00, 40);
379  rbsize_add_band(&rbsize_results[18], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 28, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
380  rbsize_add_band(&rbsize_results[18], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 28, 0x00, 183);
381  rbsize_add_band(&rbsize_results[18], 595 - string_width("MMMMMMM"), 0, 672, 28, 0x00, 77 + string_width("MMMMMMM"));
382  rbsize_add_band(&rbsize_results[18], 0, 28, 672, 56, 0x00, 200);
383 
384  rbsize_results[19] = rbsize_init(0, 0, 672, 8 + 2*system_font_height, 40, 2, 5);
387  rbsize_add_band(&rbsize_results[19], 0, 0, 87 + string_width("ABC"), 4 + system_font_height, 0x00, 40);
388  rbsize_add_band(&rbsize_results[19], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
389  rbsize_add_band(&rbsize_results[19], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 4 + system_font_height, 0x00, 183);
390  rbsize_add_band(&rbsize_results[19], 595 - string_width("MMMMMMM"), 0, 672, 4 + system_font_height, 0x00, 77 + string_width("MMMMMMM"));
391  rbsize_add_band(&rbsize_results[19], 0, 4 + system_font_height, 672, 8 + 2*system_font_height, 0x00, 200);
392 
393  rbsize_results[20] = rbsize_init(0, 0, 672, 56, 56, 2, 5);
394  rbsize_add_row(&rbsize_results[20], 28);
395  rbsize_add_row(&rbsize_results[20], 28);
396  rbsize_add_band(&rbsize_results[20], 0, 0, 87 + string_width("ABC"), 28, 0x00, 40);
397  rbsize_add_band(&rbsize_results[20], 87 + string_width("ABC"), 0, 412 - string_width("MMMMMMM"), 28, 0x00, 325 - string_width("ABC") - string_width("MMMMMMM"));
398  rbsize_add_band(&rbsize_results[20], 412 - string_width("MMMMMMM"), 0, 595 - string_width("MMMMMMM"), 28, 0x00, 183);
399  rbsize_add_band(&rbsize_results[20], 595 - string_width("MMMMMMM"), 0, 672, 28, 0x00, 77 + string_width("MMMMMMM"));
400  rbsize_add_band(&rbsize_results[20], 0, 28, 672, 56, 0x00, 200);
401 
402  rbsize_results[21] = rbsize_init(0, 0, 672, 0, 0, 0, 0);
403 
404  rbsize_results[22] = rbsize_init(0, 0, 672, 65, 56, 1, 3);
405  rbsize_add_row(&rbsize_results[22], 65);
406  rbsize_add_band(&rbsize_results[22], 0, 0, 90, 65, 0x40, 90);
407  rbsize_add_band(&rbsize_results[22], 90, 0, 180, 65, 0x40, 90);
408  rbsize_add_band(&rbsize_results[22], 180, 0, 672, 65, 0x40, 90);
409 
410  rbsize_results[23] = rbsize_init(0, 0, 0, 226, 0, 0, 0);
411 
412  rbsize_results[24] = rbsize_init(0, 0, 65, 226, 65, 1, 1);
413  rbsize_add_row(&rbsize_results[24], 65);
414  rbsize_add_band(&rbsize_results[24], 0, 0, 226, 65, 0x40, 90);
415 
416  rbsize_results[25] = rbsize_init(0, 0, 65, 226, 65, 1, 2);
417  rbsize_add_row(&rbsize_results[25], 65);
418  rbsize_add_band(&rbsize_results[25], 0, 0, 90, 65, 0x40, 90);
419  rbsize_add_band(&rbsize_results[25], 90, 0, 226, 65, 0x40, 90);
420 
421  rbsize_results[26] = rbsize_init(0, 0, 65, 226, 65, 1, 3);
422  rbsize_add_row(&rbsize_results[26], 65);
423  rbsize_add_band(&rbsize_results[26], 0, 0, 90, 65, 0x40, 90);
424  rbsize_add_band(&rbsize_results[26], 90, 0, 163, 65, 0x40, 90);
425  rbsize_add_band(&rbsize_results[26], 163, 0, 226, 65, 0x40, 90);
426 }
static int system_font_height
Definition: rebar.c:35
static rbsize_result_t rbsize_init(int cleft, int ctop, int cright, int cbottom, int cyBarHeight, int nRows, int nBands)
Definition: rebar.c:213
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static int string_width(const CHAR *s)
Definition: rebar.c:187
static rbsize_result_t * rbsize_results
Definition: rebar.c:240
static void rbsize_add_band(rbsize_result_t *rbsr, int left, int top, int right, int bottom, DWORD fStyle, UINT cx)
Definition: rebar.c:232
#define rbsize_results_num
Definition: rebar.c:242
static void rbsize_add_row(rbsize_result_t *rbsr, int rowHeight)
Definition: rebar.c:227

Referenced by test_layout().

◆ register_parent_wnd_class()

static BOOL register_parent_wnd_class ( void  )
static

Definition at line 1051 of file rebar.c.

1052 {
1053  WNDCLASSA wc;
1054 
1055  wc.style = CS_HREDRAW | CS_VREDRAW;
1056  wc.cbClsExtra = 0;
1057  wc.cbWndExtra = 0;
1059  wc.hIcon = NULL;
1062  wc.lpszMenuName = NULL;
1063  wc.lpszClassName = "MyTestWnd";
1065 
1066  return RegisterClassA(&wc);
1067 }
int cbClsExtra
Definition: winuser.h:3140
#define CS_HREDRAW
Definition: winuser.h:648
LPCSTR lpszMenuName
Definition: winuser.h:3146
HBRUSH hbrBackground
Definition: winuser.h:3145
#define COLOR_WINDOW
Definition: winuser.h:908
#define IDC_IBEAM
Definition: winuser.h:683
int cbWndExtra
Definition: winuser.h:3141
HCURSOR hCursor
Definition: winuser.h:3144
smooth NULL
Definition: ftsmooth.c:416
const char * LPCSTR
Definition: xmlstorage.h:183
#define CS_VREDRAW
Definition: winuser.h:653
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
LPCSTR lpszClassName
Definition: winuser.h:3147
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
UINT style
Definition: winuser.h:3138
HINSTANCE hInstance
Definition: winuser.h:3142
WNDPROC lpfnWndProc
Definition: winuser.h:3139
HBRUSH WINAPI GetSysColorBrush(_In_ int)
static LRESULT CALLBACK parent_wndproc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: rebar.c:128
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
HICON hIcon
Definition: winuser.h:3143

Referenced by create_parent_window().

◆ START_TEST()

START_TEST ( rebar  )

Definition at line 1138 of file rebar.c.

1139 {
1140  MSG msg;
1141 
1143  init_functions();
1144 
1146 
1147  test_bandinfo();
1148  test_colors();
1149  test_showband();
1151 
1152  if(!is_font_installed("System") || !is_font_installed("Tahoma"))
1153  {
1154  skip("Missing System or Tahoma font\n");
1155  goto out;
1156  }
1157 
1158  test_layout();
1159  test_resize();
1160 
1161 out:
1162  PostQuitMessage(0);
1163  while(GetMessageA(&msg,0,0,0)) {
1166  }
1168 }
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
static void test_colors(void)
Definition: rebar.c:1003
static void init_system_font_height(void)
Definition: rebar.c:69
static HWND hMainWnd
Definition: rebar.c:34
static void test_showband(void)
Definition: rebar.c:1084
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
static BOOL is_font_installed(const char *name)
Definition: rebar.c:57
BOOL WINAPI DestroyWindow(_In_ HWND)
static void test_bandinfo(void)
Definition: rebar.c:943
static void init_functions(void)
Definition: rebar.c:1128
static FILE * out
Definition: regtests2xml.c:44
static void test_notification(void)
Definition: rebar.c:1114
static HWND create_parent_window(void)
Definition: rebar.c:1069
#define skip(...)
Definition: atltest.h:64
#define msg(x)
Definition: auth_time.c:54
static void test_layout(void)
Definition: rebar.c:492
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
static void test_resize(void)
Definition: rebar.c:845

◆ string_width()

static int string_width ( const CHAR s)
static

Definition at line 187 of file rebar.c.

187  {
188  SIZE sz;
189  HDC hdc;
190 
193  DeleteDC(hdc);
194 
195  return sz.cx;
196 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static HDC
Definition: imagelist.c:92
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
smooth NULL
Definition: ftsmooth.c:416
LONG cx
Definition: windef.h:334
BOOL WINAPI GetTextExtentPoint32A(_In_ HDC hdc, _In_reads_(c) LPCSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
HDC hdc
Definition: main.c:9
GLdouble s
Definition: gl.h:2039
BOOL WINAPI DeleteDC(_In_ HDC)

Referenced by rbsize_results_init().

◆ test_bandinfo()

static void test_bandinfo ( void  )
static

Definition at line 943 of file rebar.c.

944 {
945  REBARBANDINFOA rb;
946  CHAR szABC[] = "ABC";
947  CHAR szABCD[] = "ABCD";
948  HWND hRebar;
949 
950  hRebar = create_rebar_control();
952  rb.fMask = 0;
953  if (!SendMessageA(hRebar, RB_INSERTBANDA, 0, (LPARAM)&rb))
954  {
955  win_skip( "V6 info not supported\n" );
956  DestroyWindow(hRebar);
957  return;
958  }
959  expect_band_content(hRebar, 0, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 0, 0, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 0, -1);
960 
961  rb.fMask = RBBIM_CHILDSIZE;
962  rb.cxMinChild = 15;
963  rb.cyMinChild = 20;
964  rb.cyChild = 30;
965  rb.cyMaxChild = 20;
966  rb.cyIntegral = 10;
967  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
968  expect_band_content(hRebar, 0, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 0, -1);
969 
970  rb.fMask = RBBIM_TEXT;
971  rb.lpText = szABC;
972  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
973  expect_band_content(hRebar, 0, 0, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 3 + 2*system_font_height, -1);
974 
975  rb.cbSize = REBARBANDINFOA_V6_SIZE;
976  rb.fMask = 0;
977  ok(SendMessageA(hRebar, RB_INSERTBANDA, 1, (LPARAM)&rb), "RB_INSERTBANDA failed\n");
978  expect_band_content(hRebar, 1, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 0, 0, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 9, -1);
979  expect_band_content(hRebar, 0, 0, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 8 + 2*system_font_height, -1);
980 
981  rb.fMask = RBBIM_HEADERSIZE;
982  rb.cxHeader = 50;
983  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
984  expect_band_content(hRebar, 0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 50, -1);
985 
986  rb.cxHeader = 5;
987  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
988  expect_band_content(hRebar, 0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 5, -1);
989 
990  rb.fMask = RBBIM_TEXT;
991  rb.lpText = szABCD;
992  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
993  expect_band_content(hRebar, 0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABCD", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 5, -1);
994  rb.fMask = RBBIM_STYLE | RBBIM_TEXT;
995  rb.fStyle = RBBS_VARIABLEHEIGHT;
996  rb.lpText = szABC;
997  ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_SETBANDINFOA failed\n");
998  expect_band_content(hRebar, 0, RBBS_VARIABLEHEIGHT, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 20, 0x7fffffff, 0, 0, 0, 8 + 2*system_font_height, 5);
999 
1000  DestroyWindow(hRebar);
1001 }
static int system_font_height
Definition: rebar.c:35
#define RB_SETBANDINFOA
Definition: commctrl.h:1575
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
char CHAR
Definition: xmlstorage.h:175
#define RBBIM_HEADERSIZE
Definition: commctrl.h:1509
BOOL WINAPI DestroyWindow(_In_ HWND)
DWORD WINAPI GetSysColor(_In_ int)
static HWND create_rebar_control(void)
Definition: rebar.c:80
#define RBBIM_STYLE
Definition: commctrl.h:1498
#define COLOR_3DFACE
Definition: winuser.h:919
#define RB_INSERTBANDA
Definition: commctrl.h:1571
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define RBBS_VARIABLEHEIGHT
Definition: commctrl.h:1491
#define RBBIM_TEXT
Definition: commctrl.h:1500
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1503
#define ok(value,...)
Definition: atltest.h:57
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537
#define expect_band_content(hRebar, uBand, fStyle, clrFore, clrBack, lpText, iImage, hwndChild, cxMinChild, cyMinChild, cx, hbmBack, wID, cyChild, cyMaxChild, cyIntegral, cxIdeal, lParam, cxHeader, cxHeader_broken)
Definition: rebar.c:936
#define win_skip
Definition: test.h:149

Referenced by START_TEST().

◆ test_colors()

static void test_colors ( void  )
static

Definition at line 1003 of file rebar.c.

1004 {
1006  COLORREF clr;
1007  BOOL ret;
1008  HWND hRebar;
1009  REBARBANDINFOA bi;
1010 
1011  hRebar = create_rebar_control();
1012 
1013  /* test default colors */
1014  clr = SendMessageA(hRebar, RB_GETTEXTCOLOR, 0, 0);
1015  compare(clr, CLR_NONE, "%x");
1016  clr = SendMessageA(hRebar, RB_GETBKCOLOR, 0, 0);
1017  compare(clr, CLR_NONE, "%x");
1018 
1019  scheme.dwSize = sizeof(scheme);
1020  scheme.clrBtnHighlight = 0;
1021  scheme.clrBtnShadow = 0;
1022  ret = SendMessageA(hRebar, RB_GETCOLORSCHEME, 0, (LPARAM)&scheme);
1023  if (ret)
1024  {
1025  compare(scheme.clrBtnHighlight, CLR_DEFAULT, "%x");
1026  compare(scheme.clrBtnShadow, CLR_DEFAULT, "%x");
1027  }
1028  else
1029  skip("RB_GETCOLORSCHEME not supported\n");
1030 
1031  /* check default band colors */
1032  add_band_w(hRebar, "", 0, 10, 10);
1034  bi.fMask = RBBIM_COLORS;
1035  bi.clrFore = bi.clrBack = 0xc0ffe;
1036  ret = SendMessageA(hRebar, RB_GETBANDINFOA, 0, (LPARAM)&bi);
1037  ok(ret, "RB_GETBANDINFOA failed\n");
1038  compare(bi.clrFore, RGB(0, 0, 0), "%x");
1040 
1041  SendMessageA(hRebar, RB_SETTEXTCOLOR, 0, RGB(255, 0, 0));
1042  bi.clrFore = bi.clrBack = 0xc0ffe;
1043  ret = SendMessageA(hRebar, RB_GETBANDINFOA, 0, (LPARAM)&bi);
1044  ok(ret, "RB_GETBANDINFOA failed\n");
1045  compare(bi.clrFore, RGB(0, 0, 0), "%x");
1046 
1047  DestroyWindow(hRebar);
1048 }
#define RB_GETCOLORSCHEME
Definition: commctrl.h:1596
#define RB_GETBKCOLOR
Definition: commctrl.h:1588
static void add_band_w(HWND hRebar, LPCSTR lpszText, int cxMinChild, int cx, int cxIdeal)
Definition: rebar.c:474
#define RGB(r, g, b)
Definition: precomp.h:62
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
COLORREF clrBack
Definition: commctrl.h:1516
DWORD scheme
BOOL WINAPI DestroyWindow(_In_ HWND)
DWORD WINAPI GetSysColor(_In_ int)
static HWND create_rebar_control(void)
Definition: rebar.c:80
#define RB_GETBANDINFOA
Definition: commctrl.h:1606
#define COLOR_3DFACE
Definition: winuser.h:919
unsigned int BOOL
Definition: ntddk_ex.h:94
LONG_PTR LPARAM
Definition: windef.h:208
#define CLR_NONE
Definition: commctrl.h:315
#define RBBIM_COLORS
Definition: commctrl.h:1499
#define RB_SETTEXTCOLOR
Definition: commctrl.h:1589
DWORD COLORREF
Definition: windef.h:300
int ret
#define compare(val, exp, format)
Definition: rebar.c:47
#define RB_GETTEXTCOLOR
Definition: commctrl.h:1590
COLORREF clrFore
Definition: commctrl.h:1515
#define ok(value,...)
Definition: atltest.h:57
#define CLR_DEFAULT
Definition: commctrl.h:316
#define skip(...)
Definition: atltest.h:64
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537

Referenced by START_TEST().

◆ test_layout()

static void test_layout ( void  )
static

Definition at line 492 of file rebar.c.

493 {
494  HWND hRebar;
495  REBARBANDINFOA rbi;
497  REBARINFO ri;
498 
500 
501  hRebar = create_rebar_control();
502  check_sizes();
505  rbi.cx = 200;
506  rbi.cxMinChild = 100;
507  rbi.cyMinChild = 30;
508  rbi.hwndChild = NULL;
509  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
510  check_sizes();
511 
512  rbi.fMask |= RBBIM_STYLE;
513  rbi.fStyle = RBBS_CHILDEDGE;
514  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
515  check_sizes();
516 
517  rbi.fStyle = 0;
518  rbi.cx = 200;
519  rbi.cxMinChild = 30;
520  rbi.cyMinChild = 30;
521  rbi.hwndChild = build_toolbar(0, hRebar);
522  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
523  check_sizes();
524 
525  rbi.fStyle = RBBS_CHILDEDGE;
526  rbi.cx = 68;
527  rbi.hwndChild = build_toolbar(0, hRebar);
528  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
529  check_sizes();
530 
532  check_sizes(); /* a style change won't start a relayout */
533  rbi.fMask = RBBIM_SIZE;
534  rbi.cx = 66;
535  SendMessageA(hRebar, RB_SETBANDINFOA, 3, (LPARAM)&rbi);
536  check_sizes(); /* here it will be relayouted */
537 
538  /* this will force a new row */
540  rbi.cx = 200;
541  rbi.cxMinChild = 400;
542  rbi.cyMinChild = 30;
543  rbi.hwndChild = build_toolbar(0, hRebar);
544  SendMessageA(hRebar, RB_INSERTBANDA, 1, (LPARAM)&rbi);
545  check_sizes();
546 
547  rbi.fMask = RBBIM_STYLE;
548  rbi.fStyle = RBBS_HIDDEN;
549  SendMessageA(hRebar, RB_SETBANDINFOA, 2, (LPARAM)&rbi);
550  check_sizes();
551 
552  SendMessageA(hRebar, RB_DELETEBAND, 2, 0);
553  check_sizes();
554  SendMessageA(hRebar, RB_DELETEBAND, 0, 0);
555  check_sizes();
556  SendMessageA(hRebar, RB_DELETEBAND, 1, 0);
557  check_sizes();
558 
559  DestroyWindow(hRebar);
560 
561  hRebar = create_rebar_control();
562  add_band_w(hRebar, "ABC", 70, 40, 100);
563  add_band_w(hRebar, NULL, 40, 70, 100);
564  add_band_w(hRebar, NULL, 170, 240, 100);
565  add_band_w(hRebar, "MMMMMMM", 60, 60, 100);
566  add_band_w(hRebar, NULL, 200, 200, 100);
567  check_sizes();
568  SendMessageA(hRebar, RB_MAXIMIZEBAND, 1, TRUE);
569  check_sizes();
570  SendMessageA(hRebar, RB_MAXIMIZEBAND, 1, TRUE);
571  check_sizes();
572  SendMessageA(hRebar, RB_MAXIMIZEBAND, 2, FALSE);
573  check_sizes();
574  SendMessageA(hRebar, RB_MINIMIZEBAND, 2, 0);
575  check_sizes();
576  SendMessageA(hRebar, RB_MINIMIZEBAND, 0, 0);
577  check_sizes();
578 
579  /* an image will increase the band height */
580  himl = pImageList_LoadImageA(GetModuleHandleA("comctl32"), MAKEINTRESOURCEA(121), 24, 2,
582  ri.cbSize = sizeof(ri);
583  ri.fMask = RBIM_IMAGELIST;
584  ri.himl = himl;
585  ok(SendMessageA(hRebar, RB_SETBARINFO, 0, (LPARAM)&ri), "RB_SETBARINFO failed\n");
586  rbi.fMask = RBBIM_IMAGE;
587  rbi.iImage = 1;
588  SendMessageA(hRebar, RB_SETBANDINFOA, 1, (LPARAM)&rbi);
589  check_sizes();
590 
591  /* after removing it everything is back to normal*/
592  rbi.iImage = -1;
593  SendMessageA(hRebar, RB_SETBANDINFOA, 1, (LPARAM)&rbi);
594  check_sizes();
595 
596  /* Only -1 means that the image is not present. Other invalid values increase the height */
597  rbi.iImage = -2;
598  SendMessageA(hRebar, RB_SETBANDINFOA, 1, (LPARAM)&rbi);
599  check_sizes();
600 
601  DestroyWindow(hRebar);
602 
603  /* VARHEIGHT resizing test on a horizontal rebar */
604  hRebar = create_rebar_control();
606  check_sizes();
609  rbi.cxMinChild = 50;
610  rbi.cyMinChild = 10;
611  rbi.cyIntegral = 11;
612  rbi.cyChild = 70;
613  rbi.cyMaxChild = 200;
614  rbi.cx = 90;
615  rbi.hwndChild = build_toolbar(0, hRebar);
616  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
617 
618  rbi.cyChild = 50;
619  rbi.hwndChild = build_toolbar(0, hRebar);
620  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
621 
622  rbi.cyMinChild = 40;
623  rbi.cyChild = 50;
624  rbi.cyIntegral = 5;
625  rbi.hwndChild = build_toolbar(0, hRebar);
626  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
627  check_sizes();
628 
629  DestroyWindow(hRebar);
630 
631  /* VARHEIGHT resizing on a vertical rebar */
632  hRebar = create_rebar_control();
634  check_sizes();
637  rbi.cxMinChild = 50;
638  rbi.cyMinChild = 10;
639  rbi.cyIntegral = 11;
640  rbi.cyChild = 70;
641  rbi.cyMaxChild = 90;
642  rbi.cx = 90;
643  rbi.hwndChild = build_toolbar(0, hRebar);
644  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
645  check_sizes();
646 
647  rbi.cyChild = 50;
648  rbi.hwndChild = build_toolbar(0, hRebar);
649  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
650  check_sizes();
651 
652  rbi.cyMinChild = 40;
653  rbi.cyChild = 50;
654  rbi.cyIntegral = 5;
655  rbi.hwndChild = build_toolbar(0, hRebar);
656  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
657  check_sizes();
658 
660  DestroyWindow(hRebar);
661  pImageList_Destroy(himl);
662 }
#define TRUE
Definition: types.h:120
#define RBBIM_CHILD
Definition: commctrl.h:1502
static void add_band_w(HWND hRebar, LPCSTR lpszText, int cxMinChild, int cx, int cxIdeal)
Definition: rebar.c:474
#define RB_SETBANDINFOA
Definition: commctrl.h:1575
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define RBBS_CHILDEDGE
Definition: commctrl.h:1487
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define check_sizes()
Definition: rebar.c:470
#define RBIM_IMAGELIST
Definition: commctrl.h:1464
HIMAGELIST himl
BOOL WINAPI DestroyWindow(_In_ HWND)
#define RBBIM_IMAGE
Definition: commctrl.h:1501
#define CCS_VERT
Definition: commctrl.h:2245
#define RBS_BANDBORDERS
Definition: commctrl.h:1468
static HWND create_rebar_control(void)
Definition: rebar.c:80
#define RBBIM_STYLE
Definition: commctrl.h:1498
#define RBBIM_SIZE
Definition: commctrl.h:1504
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
#define RB_MINIMIZEBAND
Definition: commctrl.h:1610
#define RB_INSERTBANDA
Definition: commctrl.h:1571
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define CLR_NONE
Definition: commctrl.h:315
#define RB_SETBARINFO
Definition: commctrl.h:1574
#define RBBS_VARIABLEHEIGHT
Definition: commctrl.h:1491
#define RBS_AUTOSIZE
Definition: commctrl.h:1471
static void rbsize_results_free(void)
Definition: rebar.c:428
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1503
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
HIMAGELIST himl
Definition: commctrl.h:1479
static HWND build_toolbar(int nr, HWND hParent)
Definition: rebar.c:93
#define GWL_STYLE
Definition: winuser.h:846
#define RBBS_HIDDEN
Definition: commctrl.h:1488
#define ok(value,...)
Definition: atltest.h:57
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define RB_MAXIMIZEBAND
Definition: commctrl.h:1611
#define RB_DELETEBAND
Definition: commctrl.h:1572
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537
#define LR_DEFAULTCOLOR
Definition: winuser.h:1077
static void rbsize_results_init(void)
Definition: rebar.c:244

Referenced by START_TEST().

◆ test_notification()

static void test_notification ( void  )
static

Definition at line 1114 of file rebar.c.

1115 {
1116  MEASUREITEMSTRUCT mis;
1117  HWND rebar;
1118 
1119  rebar = create_rebar_control();
1120 
1122  SendMessageA(rebar, WM_MEASUREITEM, 0, (LPARAM)&mis);
1123  ok(g_parent_measureitem == 1, "got %d\n", g_parent_measureitem);
1124 
1125  DestroyWindow(rebar);
1126 }
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyWindow(_In_ HWND)
static HWND create_rebar_control(void)
Definition: rebar.c:80
LONG_PTR LPARAM
Definition: windef.h:208
#define WM_MEASUREITEM
Definition: winuser.h:1628
#define ok(value,...)
Definition: atltest.h:57
static int g_parent_measureitem
Definition: rebar.c:126

Referenced by START_TEST().

◆ test_resize()

static void test_resize ( void  )
static

Definition at line 845 of file rebar.c.

846 {
851 
852  const int styles_count = ARRAY_SIZE(dwStyles);
853  int i;
854 
855  for (i = 0; i < styles_count; i++)
856  {
857  HWND hRebar;
858 
859  comment("style %08x", dwStyles[i]);
860  SetRect(&height_change_notify_rect, -1, -1, -1, -1);
861  hRebar = CreateWindowA(REBARCLASSNAMEA, "A", dwStyles[i] | WS_CHILD | WS_VISIBLE, 10, 5, 500, 15, hMainWnd, NULL, GetModuleHandleA(NULL), 0);
862  check_client();
863  add_band_w(hRebar, NULL, 70, 100, 0);
864  if (dwStyles[i] & CCS_NOPARENTALIGN) /* the window drifts downward for CCS_NOPARENTALIGN without CCS_NODIVIDER */
865  check_client();
866  add_band_w(hRebar, NULL, 70, 100, 0);
867  check_client();
868  MoveWindow(hRebar, 10, 10, 100, 100, TRUE);
869  check_client();
870  MoveWindow(hRebar, 0, 0, 0, 0, TRUE);
871  check_client();
872  /* try to fool the rebar by sending invalid width/height - won't work */
873  if (dwStyles[i] & (CCS_NORESIZE | CCS_NOPARENTALIGN))
874  {
875  WINDOWPOS pos;
876  pos.hwnd = hRebar;
877  pos.hwndInsertAfter = NULL;
878  pos.cx = 500;
879  pos.cy = 500;
880  pos.x = 10;
881  pos.y = 10;
882  pos.flags = 0;
885  check_client();
886  SendMessageA(hRebar, WM_SIZE, SIZE_RESTORED, MAKELONG(500, 500));
887  check_client();
888  }
889  SendMessageA(hRebar, RB_DELETEBAND, 0, 0);
890  check_client();
891  SendMessageA(hRebar, RB_DELETEBAND, 0, 0);
892  MoveWindow(hRebar, 0, 0, 100, 100, TRUE);
893  check_client();
894  DestroyWindow(hRebar);
895  }
896 }
#define TRUE
Definition: types.h:120
static void add_band_w(HWND hRebar, LPCSTR lpszText, int cxMinChild, int cx, int cxIdeal)
Definition: rebar.c:474
#define REBARCLASSNAMEA
Definition: commctrl.h:1460
static HWND hMainWnd
Definition: rebar.c:34
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SIZE_RESTORED
Definition: winuser.h:2480
#define WS_CHILD
Definition: pedump.c:617
#define comment(fmt, arg1)
Definition: rebar.c:820
static RECT height_change_notify_rect
Definition: rebar.c:33
BOOL WINAPI DestroyWindow(_In_ HWND)
#define CCS_VERT
Definition: commctrl.h:2245
#define CCS_NODIVIDER
Definition: commctrl.h:2244
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4290
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define CCS_TOP
Definition: commctrl.h:2238
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2242
#define CCS_BOTTOM
Definition: commctrl.h:2240
#define WM_SIZE
Definition: winuser.h:1593
#define WM_WINDOWPOSCHANGING
Definition: winuser.h:1643
unsigned long DWORD
Definition: ntddk_ex.h:95
#define CCS_NORESIZE
Definition: commctrl.h:2241
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define WS_BORDER
Definition: pedump.c:625
#define ARRAY_SIZE(a)
Definition: main.h:24
#define CCS_RIGHT
Definition: commctrl.h:2247
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1644
#define CCS_NOMOVEY
Definition: commctrl.h:2239
#define RB_DELETEBAND
Definition: commctrl.h:1572
#define check_client()
Definition: rebar.c:821
#define WS_VISIBLE
Definition: pedump.c:620

Referenced by START_TEST().

◆ test_showband()

static void test_showband ( void  )
static

Definition at line 1084 of file rebar.c.

1085 {
1086  HWND hRebar;
1087  REBARBANDINFOA rbi;
1088  BOOL ret;
1089 
1090  hRebar = create_rebar_control();
1091 
1092  /* no bands */
1093  ret = SendMessageA(hRebar, RB_SHOWBAND, 0, TRUE);
1094  ok(ret == FALSE, "got %d\n", ret);
1095 
1098  rbi.cx = 200;
1099  rbi.cxMinChild = 100;
1100  rbi.cyMinChild = 30;
1101  rbi.hwndChild = NULL;
1102  SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rbi);
1103 
1104  /* index out of range */
1105  ret = SendMessageA(hRebar, RB_SHOWBAND, 1, TRUE);
1106  ok(ret == FALSE, "got %d\n", ret);
1107 
1108  ret = SendMessageA(hRebar, RB_SHOWBAND, 0, TRUE);
1109  ok(ret == TRUE, "got %d\n", ret);
1110 
1111  DestroyWindow(hRebar);
1112 }
#define TRUE
Definition: types.h:120
#define RBBIM_CHILD
Definition: commctrl.h:1502
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyWindow(_In_ HWND)
static HWND create_rebar_control(void)
Definition: rebar.c:80
#define RBBIM_SIZE
Definition: commctrl.h:1504
unsigned int BOOL
Definition: ntddk_ex.h:94
#define RB_INSERTBANDA
Definition: commctrl.h:1571
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1503
#define RB_SHOWBAND
Definition: commctrl.h:1614
int ret
#define ok(value,...)
Definition: atltest.h:57
#define REBARBANDINFOA_V6_SIZE
Definition: commctrl.h:1537

Referenced by START_TEST().

Variable Documentation

◆ COLORREF

Definition at line 31 of file rebar.c.

◆ g_parent_measureitem

int g_parent_measureitem
static

Definition at line 126 of file rebar.c.

Referenced by parent_wndproc(), and test_notification().

◆ height_change_notify_rect

RECT height_change_notify_rect
static

Definition at line 33 of file rebar.c.

Referenced by parent_wndproc(), and test_resize().

◆ hMainWnd

HWND hMainWnd
static

Definition at line 34 of file rebar.c.

Referenced by create_rebar_control(), START_TEST(), and test_resize().

◆ int

int

Definition at line 31 of file rebar.c.

Referenced by REBAR_SizeToHeight().

◆ LPCSTR

Definition at line 31 of file rebar.c.

◆ rbsize_numtests

int rbsize_numtests = 0
static

Definition at line 440 of file rebar.c.

◆ rbsize_results

rbsize_result_t* rbsize_results
static

Definition at line 240 of file rebar.c.

Referenced by rbsize_results_free(), and rbsize_results_init().

◆ resize_numtests

DWORD resize_numtests = 0
static

Definition at line 818 of file rebar.c.

◆ resize_results

const rbresize_test_result_t resize_results[]
static

Definition at line 697 of file rebar.c.

◆ system_font_height

int system_font_height
static

Definition at line 35 of file rebar.c.

Referenced by init_system_font_height(), rbsize_results_init(), and test_bandinfo().

◆ UINT

Definition at line 31 of file rebar.c.

Referenced by REBAR_DeleteBand().