Added chevron support.

This commit is contained in:
Robert Shearman 2003-11-09 00:28:24 +00:00 committed by Alexandre Julliard
parent a7c4fa8119
commit fc58ef8119
2 changed files with 270 additions and 72 deletions

View File

@ -119,7 +119,7 @@
*
* Still to do:
* 2. Following still not handled: RBBS_FIXEDBMP,
* RBBS_USECHEVRON, CCS_NORESIZE,
* CCS_NORESIZE,
* CCS_NOMOVEX, CCS_NOMOVEY
* 3. Following are only partially handled:
* RBS_AUTOSIZE, RBBS_VARIABLEHEIGHT
@ -136,7 +136,7 @@
* WM_SYSCOLORCHANGE, WM_VKEYTOITEM, WM_WININICHANGE
* 7. The following notifications are not implemented:
* NM_CUSTOMDRAW, NM_RELEASEDCAPTURE
* RB_CHEVRONPUSHED, RBN_MINMAX
* RBN_MINMAX
*/
#include <stdarg.h>
@ -194,6 +194,7 @@ typedef struct
RECT rcCapImage; /* calculated caption image rectangle */
RECT rcCapText; /* calculated caption text rectangle */
RECT rcChild; /* calculated child rectangle */
RECT rcChevron; /* calculated chevron rectangle */
LPWSTR lpText;
HWND hwndPrevParent;
@ -210,6 +211,8 @@ typedef struct
#define DRAW_TEXT 0x00000004
#define DRAW_RIGHTSEP 0x00000010
#define DRAW_BOTTOMSEP 0x00000020
#define DRAW_CHEVRONHOT 0x00000040
#define DRAW_CHEVRONPUSHED 0x00000080
#define NTF_INVALIDATE 0x01000000
typedef struct
@ -248,9 +251,11 @@ typedef struct
INT iVersion; /* version number */
POINTS dragStart; /* x,y of button down */
POINTS dragNow; /* x,y of this MouseMove */
INT ihitBand; /* band number of band whose gripper was grabbed */
INT iOldBand; /* last band that had the mouse cursor over it */
INT ihitoffset; /* offset of hotspot from gripper.left */
POINT origin; /* left/upper corner of client */
INT ichevronhotBand; /* last band that had a hot chevron */
INT iGrabbedBand;/* band number of band whose gripper was grabbed */
REBAR_ROW *rows; /* pointer to row indexes */
REBAR_BAND *bands; /* pointer to the array of rebar bands */
@ -293,6 +298,9 @@ typedef struct
/* if present. */
#define GRIPPER_WIDTH 3
/* Width of the chevron button if present */
#define CHEVRON_WIDTH 10
/* Height of divider for Rebar if not disabled (CCS_NODIVIDER) */
/* either top or bottom */
#define REBAR_DIVIDER 2
@ -437,10 +445,10 @@ REBAR_DumpBand (REBAR_INFO *iP)
TRACE("hwnd=%p: color=%08lx/%08lx, bands=%u, rows=%u, cSize=%ld,%ld\n",
iP->hwndSelf, iP->clrText, iP->clrBk, iP->uNumBands, iP->uNumRows,
iP->calcSize.cx, iP->calcSize.cy);
TRACE("hwnd=%p: flags=%08x, dragStart=%d,%d, dragNow=%d,%d, ihitBand=%d\n",
TRACE("hwnd=%p: flags=%08x, dragStart=%d,%d, dragNow=%d,%d, iGrabbedBand=%d\n",
iP->hwndSelf, iP->fStatus, iP->dragStart.x, iP->dragStart.y,
iP->dragNow.x, iP->dragNow.y,
iP->ihitBand);
iP->iGrabbedBand);
TRACE("hwnd=%p: style=%08lx, I'm Unicode=%s, notify in Unicode=%s, redraw=%s\n",
iP->hwndSelf, iP->dwStyle, (iP->bUnicode)?"TRUE":"FALSE",
(iP->NtfUnicode)?"TRUE":"FALSE", (iP->DoRedraw)?"TRUE":"FALSE");
@ -484,6 +492,25 @@ REBAR_DumpBand (REBAR_INFO *iP)
}
static void
REBAR_DrawChevron (HDC hdc, INT left, INT top, INT colorRef)
{
INT x, y;
HPEN hPen, hOldPen;
if (!(hPen = CreatePen( PS_SOLID, 1, GetSysColor( colorRef )))) return;
hOldPen = SelectObject ( hdc, hPen );
x = left + 2;
y = top;
MoveToEx (hdc, x, y, NULL);
LineTo (hdc, x+5, y++); x++;
MoveToEx (hdc, x, y, NULL);
LineTo (hdc, x+3, y++); x++;
MoveToEx (hdc, x, y, NULL);
LineTo (hdc, x+1, y++);
SelectObject( hdc, hOldPen );
DeleteObject( hPen );
}
static HWND
REBAR_GetNotifyParent (REBAR_INFO *infoPtr)
@ -613,6 +640,22 @@ REBAR_DrawBand (HDC hdc, REBAR_INFO *infoPtr, REBAR_BAND *lpBand)
SelectObject (hdc, hOldFont);
}
if (!IsRectEmpty(&lpBand->rcChevron))
{
if (lpBand->fDraw & DRAW_CHEVRONPUSHED)
{
DrawEdge(hdc, &lpBand->rcChevron, BDR_SUNKENOUTER, BF_RECT | BF_MIDDLE);
REBAR_DrawChevron(hdc, lpBand->rcChevron.left+1, lpBand->rcChevron.top + 11, COLOR_WINDOWFRAME);
}
else if (lpBand->fDraw & DRAW_CHEVRONHOT)
{
DrawEdge(hdc, &lpBand->rcChevron, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
REBAR_DrawChevron(hdc, lpBand->rcChevron.left, lpBand->rcChevron.top + 10, COLOR_WINDOWFRAME);
}
else
REBAR_DrawChevron(hdc, lpBand->rcChevron.left, lpBand->rcChevron.top + 10, COLOR_WINDOWFRAME);
}
if (lpBand->uCDret == (CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYITEMDRAW)) {
nmcd.dwDrawStage = CDDS_ITEMPOSTPAINT;
nmcd.hdc = hdc;
@ -954,6 +997,13 @@ REBAR_CalcHorzBand (REBAR_INFO *infoPtr, UINT rstart, UINT rend, BOOL notify)
SetRect (&lpBand->rcChild,
lpBand->rcBand.left+lpBand->cxHeader, lpBand->rcBand.top+yoff,
lpBand->rcBand.right-xoff, lpBand->rcBand.bottom-yoff);
if ((lpBand->fStyle & RBBS_USECHEVRON) && (lpBand->rcChild.right - lpBand->rcChild.left < lpBand->cxIdeal))
{
lpBand->rcChild.right -= CHEVRON_WIDTH;
SetRect(&lpBand->rcChevron, lpBand->rcChild.right,
lpBand->rcChild.top, lpBand->rcChild.right + CHEVRON_WIDTH,
lpBand->rcChild.bottom);
}
}
else {
SetRect (&lpBand->rcChild,
@ -1431,6 +1481,8 @@ REBAR_Layout (REBAR_INFO *infoPtr, LPRECT lpRect, BOOL notify, BOOL resetclient)
lpBand->fDraw = 0;
lpBand->iRow = row;
SetRectEmpty(&lpBand->rcChevron);
if (HIDDENBAND(lpBand)) continue;
lpBand->rcoldBand = lpBand->rcBand;
@ -2207,7 +2259,7 @@ REBAR_InternalEraseBkGnd (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam, REC
}
static void
REBAR_InternalHitTest (REBAR_INFO *infoPtr, LPPOINT lpPt, UINT *pFlags, INT *pBand)
REBAR_InternalHitTest (REBAR_INFO *infoPtr, const LPPOINT lpPt, UINT *pFlags, INT *pBand)
{
REBAR_BAND *lpBand;
RECT rect;
@ -2227,7 +2279,6 @@ REBAR_InternalHitTest (REBAR_INFO *infoPtr, LPPOINT lpPt, UINT *pFlags, INT *pBa
}
else {
/* somewhere inside */
infoPtr->ihitBand = -1;
for (iCount = 0; iCount < infoPtr->uNumBands; iCount++) {
lpBand = &infoPtr->bands[iCount];
if (HIDDENBAND(lpBand)) continue;
@ -2236,7 +2287,6 @@ REBAR_InternalHitTest (REBAR_INFO *infoPtr, LPPOINT lpPt, UINT *pFlags, INT *pBa
*pBand = iCount;
if (PtInRect (&lpBand->rcGripper, *lpPt)) {
*pFlags = RBHT_GRABBER;
infoPtr->ihitBand = iCount;
TRACE("ON GRABBER %d\n", iCount);
return;
}
@ -2255,6 +2305,11 @@ REBAR_InternalHitTest (REBAR_INFO *infoPtr, LPPOINT lpPt, UINT *pFlags, INT *pBa
TRACE("ON CLIENT %d\n", iCount);
return;
}
else if (PtInRect (&lpBand->rcChevron, *lpPt)) {
*pFlags = RBHT_CHEVRON;
TRACE("ON CHEVRON %d\n", iCount);
return;
}
else {
*pFlags = RBHT_NOWHERE;
TRACE("NOWHERE %d\n", iCount);
@ -2373,14 +2428,14 @@ REBAR_HandleLRDrag (REBAR_INFO *infoPtr, POINTS *ptsmove)
infoPtr->dragStart.x = 0;
infoPtr->dragStart.y = 0;
infoPtr->dragNow = infoPtr->dragStart;
infoPtr->ihitBand = -1;
infoPtr->iGrabbedBand = -1;
ReleaseCapture ();
return ;
}
infoPtr->fStatus |= BEGIN_DRAG_ISSUED;
}
ihitBand = infoPtr->ihitBand;
ihitBand = infoPtr->iGrabbedBand;
hitBand = &infoPtr->bands[ihitBand];
imaxdBand = ihitBand; /* to suppress warning message */
@ -3727,103 +3782,219 @@ REBAR_GetFont (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
return (LRESULT)infoPtr->hFont;
}
static LRESULT
REBAR_PushChevron(REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
if (wParam >= 0 && (UINT)wParam < infoPtr->uNumBands)
{
NMREBARCHEVRON nmrbc;
REBAR_BAND *lpBand = &infoPtr->bands[wParam];
TRACE("Pressed chevron on band %d\n", wParam);
/* redraw chevron in pushed state */
lpBand->fDraw |= DRAW_CHEVRONPUSHED;
RedrawWindow(infoPtr->hwndSelf, &lpBand->rcChevron,0,
RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);
/* notify app so it can display a popup menu or whatever */
nmrbc.uBand = wParam;
nmrbc.wID = lpBand->wID;
nmrbc.lParam = lpBand->lParam;
nmrbc.rc = lpBand->rcChevron;
nmrbc.lParamNM = lParam;
REBAR_Notify((NMHDR*)&nmrbc, infoPtr, RBN_CHEVRONPUSHED);
/* redraw chevron in previous state */
lpBand->fDraw &= ~DRAW_CHEVRONPUSHED;
InvalidateRect(infoPtr->hwndSelf, &lpBand->rcChevron, TRUE);
return TRUE;
}
return FALSE;
}
static LRESULT
REBAR_LButtonDown (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
REBAR_BAND *lpBand;
UINT htFlags;
UINT iHitBand;
POINT ptMouseDown;
ptMouseDown.x = (INT)LOWORD(lParam);
ptMouseDown.y = (INT)HIWORD(lParam);
/* If InternalHitTest did not find a hit on the Gripper, */
/* then ignore the button click. */
if (infoPtr->ihitBand == -1) return 0;
REBAR_InternalHitTest(infoPtr, &ptMouseDown, &htFlags, &iHitBand);
lpBand = &infoPtr->bands[iHitBand];
SetCapture (infoPtr->hwndSelf);
if (htFlags == RBHT_CHEVRON)
{
REBAR_PushChevron(infoPtr, iHitBand, 0);
}
else if (htFlags == RBHT_GRABBER || htFlags == RBHT_CAPTION)
{
TRACE("Starting drag\n");
/* save off the LOWORD and HIWORD of lParam as initial x,y */
lpBand = &infoPtr->bands[infoPtr->ihitBand];
infoPtr->dragStart = MAKEPOINTS(lParam);
infoPtr->dragNow = infoPtr->dragStart;
if (infoPtr->dwStyle & CCS_VERT)
infoPtr->ihitoffset = infoPtr->dragStart.y - (lpBand->rcBand.top+REBAR_PRE_GRIPPER);
else
infoPtr->ihitoffset = infoPtr->dragStart.x - (lpBand->rcBand.left+REBAR_PRE_GRIPPER);
SetCapture (infoPtr->hwndSelf);
infoPtr->iGrabbedBand = iHitBand;
/* save off the LOWORD and HIWORD of lParam as initial x,y */
infoPtr->dragStart = MAKEPOINTS(lParam);
infoPtr->dragNow = infoPtr->dragStart;
if (infoPtr->dwStyle & CCS_VERT)
infoPtr->ihitoffset = infoPtr->dragStart.y - (lpBand->rcBand.top+REBAR_PRE_GRIPPER);
else
infoPtr->ihitoffset = infoPtr->dragStart.x - (lpBand->rcBand.left+REBAR_PRE_GRIPPER);
}
return 0;
}
static LRESULT
REBAR_LButtonUp (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
NMHDR layout;
RECT rect;
INT ihitBand;
if (infoPtr->iGrabbedBand >= 0)
{
NMHDR layout;
RECT rect;
/* If InternalHitTest did not find a hit on the Gripper, */
/* then ignore the button click. */
if (infoPtr->ihitBand == -1) return 0;
infoPtr->dragStart.x = 0;
infoPtr->dragStart.y = 0;
infoPtr->dragNow = infoPtr->dragStart;
ihitBand = infoPtr->ihitBand;
infoPtr->dragStart.x = 0;
infoPtr->dragStart.y = 0;
infoPtr->dragNow = infoPtr->dragStart;
infoPtr->ihitBand = -1;
ReleaseCapture ();
ReleaseCapture ();
if (infoPtr->fStatus & BEGIN_DRAG_ISSUED) {
REBAR_Notify(&layout, infoPtr, RBN_LAYOUTCHANGED);
REBAR_Notify_NMREBAR (infoPtr, infoPtr->iGrabbedBand, RBN_ENDDRAG);
infoPtr->fStatus &= ~BEGIN_DRAG_ISSUED;
}
if (infoPtr->fStatus & BEGIN_DRAG_ISSUED) {
REBAR_Notify((NMHDR *) &layout, infoPtr, RBN_LAYOUTCHANGED);
REBAR_Notify_NMREBAR (infoPtr, ihitBand, RBN_ENDDRAG);
infoPtr->fStatus &= ~BEGIN_DRAG_ISSUED;
infoPtr->iGrabbedBand = -1;
GetClientRect(infoPtr->hwndSelf, &rect);
InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
}
GetClientRect(infoPtr->hwndSelf, &rect);
InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
return 0;
}
static LRESULT
REBAR_MouseLeave (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
if (infoPtr->ichevronhotBand >= 0)
{
REBAR_BAND *lpChevronBand = &infoPtr->bands[infoPtr->ichevronhotBand];
if (lpChevronBand->fDraw & DRAW_CHEVRONHOT)
{
lpChevronBand->fDraw &= ~DRAW_CHEVRONHOT;
InvalidateRect(infoPtr->hwndSelf, &lpChevronBand->rcChevron, TRUE);
}
}
infoPtr->iOldBand = -1;
infoPtr->ichevronhotBand = -2;
return TRUE;
}
static LRESULT
REBAR_MouseMove (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
REBAR_BAND *band1, *band2;
REBAR_BAND *lpChevronBand;
POINTS ptsmove;
/* Validate entry as hit on Gripper has occurred */
if (GetCapture() != infoPtr->hwndSelf) return 0;
if (infoPtr->ihitBand == -1) return 0;
ptsmove = MAKEPOINTS(lParam);
/* if mouse did not move much, exit */
if ((abs(ptsmove.x - infoPtr->dragNow.x) <= mindragx) &&
(abs(ptsmove.y - infoPtr->dragNow.y) <= mindragy)) return 0;
/* if we are currently dragging a band */
if (infoPtr->iGrabbedBand >= 0)
{
REBAR_BAND *band1, *band2;
if (GetCapture() != infoPtr->hwndSelf)
ERR("We are dragging but haven't got capture?!?\n");
band1 = &infoPtr->bands[infoPtr->ihitBand-1];
band2 = &infoPtr->bands[infoPtr->ihitBand];
band1 = &infoPtr->bands[infoPtr->iGrabbedBand-1];
band2 = &infoPtr->bands[infoPtr->iGrabbedBand];
/* Test for valid drag case - must not be first band in row */
if (infoPtr->dwStyle & CCS_VERT) {
if ((ptsmove.x < band2->rcBand.left) ||
(ptsmove.x > band2->rcBand.right) ||
((infoPtr->ihitBand > 0) && (band1->iRow != band2->iRow))) {
FIXME("Cannot drag to other rows yet!!\n");
}
else {
REBAR_HandleLRDrag (infoPtr, &ptsmove);
}
/* if mouse did not move much, exit */
if ((abs(ptsmove.x - infoPtr->dragNow.x) <= mindragx) &&
(abs(ptsmove.y - infoPtr->dragNow.y) <= mindragy)) return 0;
/* Test for valid drag case - must not be first band in row */
if (infoPtr->dwStyle & CCS_VERT) {
if ((ptsmove.x < band2->rcBand.left) ||
(ptsmove.x > band2->rcBand.right) ||
((infoPtr->iGrabbedBand > 0) && (band1->iRow != band2->iRow))) {
FIXME("Cannot drag to other rows yet!!\n");
}
else {
REBAR_HandleLRDrag (infoPtr, &ptsmove);
}
}
else {
if ((ptsmove.y < band2->rcBand.top) ||
(ptsmove.y > band2->rcBand.bottom) ||
((infoPtr->iGrabbedBand > 0) && (band1->iRow != band2->iRow))) {
FIXME("Cannot drag to other rows yet!!\n");
}
else {
REBAR_HandleLRDrag (infoPtr, &ptsmove);
}
}
}
else {
if ((ptsmove.y < band2->rcBand.top) ||
(ptsmove.y > band2->rcBand.bottom) ||
((infoPtr->ihitBand > 0) && (band1->iRow != band2->iRow))) {
FIXME("Cannot drag to other rows yet!!\n");
}
else {
REBAR_HandleLRDrag (infoPtr, &ptsmove);
}
else
{
POINT ptMove;
INT iHitBand;
UINT htFlags;
TRACKMOUSEEVENT trackinfo;
ptMove.x = (INT)ptsmove.x;
ptMove.y = (INT)ptsmove.y;
REBAR_InternalHitTest(infoPtr, &ptMove, &htFlags, &iHitBand);
if (infoPtr->iOldBand >= 0 && infoPtr->iOldBand == infoPtr->ichevronhotBand)
{
lpChevronBand = &infoPtr->bands[infoPtr->ichevronhotBand];
if (lpChevronBand->fDraw & DRAW_CHEVRONHOT)
{
lpChevronBand->fDraw &= ~DRAW_CHEVRONHOT;
InvalidateRect(infoPtr->hwndSelf, &lpChevronBand->rcChevron, TRUE);
}
infoPtr->ichevronhotBand = -2;
}
if (htFlags == RBHT_CHEVRON)
{
/* fill in the TRACKMOUSEEVENT struct */
trackinfo.cbSize = sizeof(TRACKMOUSEEVENT);
trackinfo.dwFlags = TME_QUERY;
trackinfo.hwndTrack = infoPtr->hwndSelf;
trackinfo.dwHoverTime = 0;
/* call _TrackMouseEvent to see if we are currently tracking for this hwnd */
_TrackMouseEvent(&trackinfo);
/* Make sure tracking is enabled so we receive a WM_MOUSELEAVE message */
if(!(trackinfo.dwFlags & TME_LEAVE))
{
trackinfo.dwFlags = TME_LEAVE; /* notify upon leaving */
/* call TRACKMOUSEEVENT so we receive a WM_MOUSELEAVE message */
/* and can properly deactivate the hot chevron */
_TrackMouseEvent(&trackinfo);
}
lpChevronBand = &infoPtr->bands[iHitBand];
if (!(lpChevronBand->fDraw & DRAW_CHEVRONHOT))
{
lpChevronBand->fDraw |= DRAW_CHEVRONHOT;
InvalidateRect(infoPtr->hwndSelf, &lpChevronBand->rcChevron, TRUE);
infoPtr->ichevronhotBand = iHitBand;
}
}
infoPtr->iOldBand = iHitBand;
}
return 0;
}
@ -3875,7 +4046,9 @@ REBAR_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->clrText = CLR_NONE;
infoPtr->clrBtnText = GetSysColor (COLOR_BTNTEXT);
infoPtr->clrBtnFace = GetSysColor (COLOR_BTNFACE);
infoPtr->ihitBand = -1;
infoPtr->iOldBand = -1;
infoPtr->ichevronhotBand = -2;
infoPtr->iGrabbedBand = -1;
infoPtr->hwndSelf = hwnd;
infoPtr->DoRedraw = TRUE;
infoPtr->hcurArrow = LoadCursorA (0, (LPSTR)IDC_ARROW);
@ -4355,6 +4528,9 @@ REBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case RB_MOVEBAND:
return REBAR_MoveBand (infoPtr, wParam, lParam);
case RB_PUSHCHEVRON:
return REBAR_PushChevron (infoPtr, wParam, lParam);
case RB_SETBANDINFOA:
return REBAR_SetBandInfoA (infoPtr, wParam, lParam);
@ -4431,6 +4607,9 @@ REBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_MOUSEMOVE:
return REBAR_MouseMove (infoPtr, wParam, lParam);
case WM_MOUSELEAVE:
return REBAR_MouseLeave (infoPtr, wParam, lParam);
case WM_NCCALCSIZE:
return REBAR_NCCalcSize (infoPtr, wParam, lParam);

View File

@ -1678,6 +1678,9 @@ static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
#define RBBS_VARIABLEHEIGHT 0x00000040
#define RBBS_GRIPPERALWAYS 0x00000080
#define RBBS_NOGRIPPER 0x00000100
#define RBBS_USECHEVRON 0x00000200
#define RBBS_HIDETITLE 0x00000400
#define RBBS_TOPALIGN 0x00000800
#define RBNM_ID 0x00000001
#define RBNM_STYLE 0x00000002
@ -1687,6 +1690,7 @@ static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
#define RBHT_CAPTION 0x0002
#define RBHT_CLIENT 0x0003
#define RBHT_GRABBER 0x0004
#define RBHT_CHEVRON 0x0008
#define RB_INSERTBANDA (WM_USER+1)
#define RB_INSERTBANDW (WM_USER+10)
@ -1726,6 +1730,8 @@ static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
#define RB_SETPALETTE (WM_USER+37)
#define RB_GETPALETTE (WM_USER+38)
#define RB_MOVEBAND (WM_USER+39)
#define RB_GETBANDMARGINS (WM_USER+40)
#define RB_PUSHCHEVRON (WM_USER+43)
#define RB_GETDROPTARGET CCM_GETDROPTARGET
#define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME
#define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME
@ -1743,6 +1749,9 @@ static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
#define RBN_DELETINGBAND (RBN_FIRST-6)
#define RBN_DELETEDBAND (RBN_FIRST-7)
#define RBN_CHILDSIZE (RBN_FIRST-8)
#define RBN_CHEVRONPUSHED (RBN_FIRST-10)
#define RBN_MINMAX (RBN_FIRST-21)
#define RBN_AUTOBREAK (RBN_FIRST-22)
typedef struct tagREBARINFO
{
@ -1838,6 +1847,16 @@ typedef struct tagNMRBAUTOSIZE
RECT rcActual;
} NMRBAUTOSIZE, *LPNMRBAUTOSIZE;
typedef struct tagNMREBARCHEVRON
{
NMHDR hdr;
UINT uBand;
UINT wID;
LPARAM lParam;
RECT rc;
LPARAM lParamNM;
} NMREBARCHEVRON, *LPNMREBARCHEVRON;
typedef struct _RB_HITTESTINFO
{
POINT pt;