Hi,
This patch adds support for chevrons in the Rebar common control. The chevron
doesn't actually look like a chevron at the moment (it is a copy of the
toolbar drop-down arrow) due to my lack of drawing skills.
In order for the chevron to show up the child control has to be wider than
the rebar itself. The child control is usually a toolbar with
TBSTYLE_EX_HIDECLIPPEDBUTTONS enabled (patch coming for this).
Changelog:
- Add chevron support
Index: wine/dlls/comctl32/rebar.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/rebar.c,v
retrieving revision 1.79
diff -u -r1.79 rebar.c
--- wine/dlls/comctl32/rebar.c 24 Oct 2003 04:18:42 -0000 1.79
+++ wine/dlls/comctl32/rebar.c 5 Nov 2003 19:42:35 -0000
@@ -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 @@
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 @@
#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 @@
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 @@
/* 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 @@
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 @@
}
+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 @@
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 @@
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 @@
lpBand->fDraw = 0;
lpBand->iRow = row;
+ SetRectEmpty(&lpBand->rcChevron);
+
if (HIDDENBAND(lpBand)) continue;
lpBand->rcoldBand = lpBand->rcBand;
@@ -2207,7 +2259,7 @@
}
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 @@
}
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 @@
*pBand = iCount;
if (PtInRect (&lpBand->rcGripper, *lpPt)) {
*pFlags = RBHT_GRABBER;
- infoPtr->ihitBand = iCount;
TRACE("ON GRABBER %d\n", iCount);
return;
}
@@ -2255,6 +2305,11 @@
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 @@
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 @@
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;
-
- SetCapture (infoPtr->hwndSelf);
-
- /* 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);
+ REBAR_InternalHitTest(infoPtr, &ptMouseDown, &htFlags, &iHitBand);
+ lpBand = &infoPtr->bands[iHitBand];
+ if (htFlags == RBHT_CHEVRON)
+ {
+ REBAR_PushChevron(infoPtr, iHitBand, 0);
+ }
+ else if (htFlags == RBHT_GRABBER || htFlags == RBHT_CAPTION)
+ {
+ TRACE("Starting drag\n");
+
+ 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 InternalHitTest did not find a hit on the Gripper, */
- /* then ignore the button click. */
- if (infoPtr->ihitBand == -1) return 0;
+ if (infoPtr->iGrabbedBand >= 0)
+ {
+ NMHDR layout;
+ RECT rect;
- ihitBand = infoPtr->ihitBand;
- infoPtr->dragStart.x = 0;
- infoPtr->dragStart.y = 0;
- infoPtr->dragNow = infoPtr->dragStart;
- infoPtr->ihitBand = -1;
+ infoPtr->dragStart.x = 0;
+ infoPtr->dragStart.y = 0;
+ infoPtr->dragNow = infoPtr->dragStart;
+
+ 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;
+ }
- ReleaseCapture ();
+ infoPtr->iGrabbedBand = -1;
- 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;
+ 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;
-
- band1 = &infoPtr->bands[infoPtr->ihitBand-1];
- band2 = &infoPtr->bands[infoPtr->ihitBand];
+ /* 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->iGrabbedBand-1];
+ band2 = &infoPtr->bands[infoPtr->iGrabbedBand];
+
+ /* 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->ihitBand > 0) && (band1->iRow != band2->iRow))) {
- FIXME("Cannot drag to other rows yet!!\n");
- }
- else {
- REBAR_HandleLRDrag (infoPtr, &ptsmove);
- }
+ /* 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 @@
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 @@
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);
@@ -4430,6 +4606,9 @@
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);
Index: wine/include/commctrl.h
===================================================================
RCS file: /home/wine/wine/include/commctrl.h,v
retrieving revision 1.121
diff -u -r1.121 commctrl.h
--- wine/include/commctrl.h 14 Oct 2003 20:13:42 -0000 1.121
+++ wine/include/commctrl.h 5 Nov 2003 19:42:49 -0000
@@ -1678,6 +1678,9 @@
#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 @@
#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 @@
#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 @@
#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
{
@@ -1837,6 +1846,16 @@
RECT rcTarget;
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
{