// common stuff for the toolbar control #ifndef _TOOLBAR_H #define _TOOLBAR_H #define TBHIGHLIGHT_BACK #define TBHIGHLIGHT_GLYPH #include typedef struct { /* info for recreating the bitmaps */ int nButtons; HINSTANCE hInst; UINT_PTR wID; } TBBMINFO, *PTBBMINFO; typedef struct _TBBUTTONDATA { union { // Someone wanted to conserve space. This is a union to make // the code easier to read. int iBitmap; int cxySep; // Used by separators }DUMMYUNIONNAME; int idCommand; BYTE fsState; BYTE fsStyle; WORD cx; DWORD_PTR dwData; INT_PTR iString; POINT pt; // top left corner of this button } TBBUTTONDATA, * LPTBBUTTONDATA; #define HIML_NORMAL 0 #define HIML_HOT 1 // Image list for the hot-tracked image #define HIML_DISABLED 2 // Image list for the hot-tracked image #define HIML_MAX 2 typedef struct { HIMAGELIST himl[3]; } TBIMAGELISTS, *LPTBIMAGELISTS; typedef struct { /* instance data for toolbar window */ CCONTROLINFO ci; DWORD dwStyleEx; HDC hdcMono; HBITMAP hbmMono; LPTBBUTTONDATA Buttons; // Array of actual buttons LPTBBUTTONDATA pCaptureButton; POINT ptCapture; HWND hwndToolTips; LPTSTR pszTip; // store current tooltip string. HWND hdlgCust; HFONT hfontIcon; int nBitmaps; #ifdef GLYPHCACHE int nSelectedBM; // currently selected pBitmaps index #endif PTBBMINFO pBitmaps; #ifdef FACECACHE HBITMAP hbmCache; #endif PTSTR *pStrings; int nStrings; int nTextRows; // # Rows of text per button UINT uStructSize; int iDxBitmap; int iDyBitmap; int iButWidth; int iButHeight; int iButMinWidth; // The min and max width of the button. If the app does not int iButMaxWidth; // have an opinion on what the min and max should be, these will be 0 int iYPos; int iNumButtons; int dyIconFont; int dxDDArrowChar; int xFirstButton; int cxPad; int cyPad; int iListGap; // space between icon and text on list-style buttons int iDropDownGap; // padding after text on list-style drop-down buttons SIZE szCached; #ifndef UNICODE BYTE bLeadByte; // Save DBCS Lead Byte #endif HDRAGPROXY hDragProxy; UINT uDrawText; UINT uDrawTextMask; COLORSCHEME clrsc; TBIMAGELISTS* pimgs; int cPimgs; int iHot; // Index of the currently Hot Tracked Button int iPressedDD; // Index of the currently pressed dropdown button int iInsert; // Index of the insertion mark, or -1 if none COLORREF clrim; // current insert mark color RECT rcInvalid; // Saved invalid rectangle BITBOOL fHimlValid : 1; BITBOOL fHimlNative : 1; BITBOOL fFontCreated: 1; BITBOOL fNoStringPool :1; BITBOOL fTTNeedsFlush :1; BITBOOL fMouseTrack: 1; // Are we currently tracking Mouse over this toolbar ? BITBOOL fActive: 1; BITBOOL fAnchorHighlight: 1;// TRUE: anchor the highlight to current position // when mouse goes out of toolbar BITBOOL fRightDrag: 1; // TRUE if current drag is right drag BITBOOL fDragOutNotify: 1; // FALSE from start of drag until mouse leaves button // at which point it is TRUE until next drag BITBOOL fInsertAfter: 1; // insert after (TRUE) or before (FALSE) button at iInsert? BITBOOL fRedrawOff : 1; // did we get a WM_SETREDRAW = FALSE BITBOOL fInvalidate : 1; // did we get any paint messages whilst we were fRedrawOff BITBOOL fRecalc : 1; // did we try to call TBRecalc while we were fRedrawOff? BITBOOL fRequeryCapture :1; // app hack see comment on lbutton up BITBOOL fShowPrefix: 1; // Show the underline of an item. Set with WM_KEYBOARDCUES BITBOOL fItemRectsValid:1; // Are the cached button item rects valid? BITBOOL fAntiAlias: 1; // Turn off AntiAliasing durning the create of a drag image. BITBOOL fForcedDoubleBuffer: 1; // Even though not explicitly set by external, we want to enable it. // Double buffer has some bagage: It also means "FlickerFree/Efficient drawing" RECT rc; // cache rc of toolbar. (used only for TBSTYLE_EX_MULTICOL and TBSTYLE_EX_HIDECLIPPEDBUTTONS) SIZE sizeBound; // largest bounding size in vertical multicolumn mode. HTHEME hTheme; int iTracking; // Used for tooltips via keyboard (current item in focus for info display, >= 0 is tracking active) LPARAM lLastMMove; // Filter out mouse move messages that didn't result in an actual move (for track tooltip canceling) int cxBarPad; int cyBarPad; int cxButtonSpacing; int cyButtonSpacing; } TBSTATE, *PTBSTATE; typedef struct { /*REVIEW: index, command, flag words, resource ids should be UINT */ int iBitmap; /* index into bitmap of this button's picture */ int idCommand; /* WM_COMMAND menu ID that this button sends */ BYTE fsState; /* button's state */ BYTE fsStyle; /* button's style */ int idsHelp; /* string ID for button's status bar help */ } OLDTBBUTTON,* LPOLDTBBUTTON; typedef struct _TBDRAWITEM { TBSTATE * ptb; LPTBBUTTONDATA pbutton; UINT state; BOOL fHotTrack; // himl and image index int iIndex; int iImage; DWORD dwCustom; NMTBCUSTOMDRAW tbcd; } TBDRAWITEM, * PTBDRAWITEM; // toolbar keyboard tooltip tracking #define TBKTT_NOTRACK -1 #define TB_IsKbdTipTracking(ptb) (ptb->iTracking != TBKTT_NOTRACK) #define IDT_TRACKINGTIP 0 #ifdef __cplusplus extern "C" { #endif HIMAGELIST TBGetImageList(PTBSTATE ptb, int iMode, int iIndex); HIMAGELIST TBSetImageList(PTBSTATE ptb, int iMode, int iIndex, HIMAGELIST himl); #define GET_HIML_INDEX GET_Y_LPARAM #define GET_IMAGE_INDEX GET_X_LPARAM HBITMAP SelectBM(HDC hDC, PTBSTATE pTBState, int nButton); void DrawButton(HDC hdc, int x, int y, PTBSTATE pTBState, LPTBBUTTONDATA ptButton, BOOL fActive); void DrawFace(HDC hdc, PRECT prc, int x, int y, int offx, int offy, int dxText, int dyText, TBDRAWITEM * ptbdraw, int iListGap, PRECT prcText); int TBHitTest(PTBSTATE pTBState, int xPos, int yPos); int PositionFromID(PTBSTATE pTBState, LONG_PTR id); void BuildButtonTemplates(void); void TBInputStruct(PTBSTATE ptb, LPTBBUTTONDATA pButtonInt, LPTBBUTTON pButtonExt); void TBOutputStruct(PTBSTATE ptb, LPTBBUTTONDATA pButtonInt, LPTBBUTTON pButtonExt); BOOL SaveRestoreFromReg(PTBSTATE ptb, BOOL bWrite, HKEY hkr, LPCTSTR pszSubKey, LPCTSTR pszValueName); void CustomizeTB(PTBSTATE pTBState, int iPos); void MoveButton(PTBSTATE pTBState, int nSource); BOOL DeleteButton(PTBSTATE ptb, UINT uIndex); BOOL TBReallocButtons(PTBSTATE ptb, UINT uButtons); BOOL TBInsertButtons(PTBSTATE ptb, UINT uWhere, UINT uButtons, LPTBBUTTON lpButtons, BOOL fNative); LRESULT SendItemNotify(PTBSTATE ptb, int iItem, int code); void TBInvalidateItemRects(PTBSTATE ptb); void ReleaseMonoDC(PTBSTATE ptb); void InitTBDrawItem(TBDRAWITEM * ptbdraw, PTBSTATE ptb, LPTBBUTTONDATA pbutton, UINT state, BOOL fHotTrack, int dxText, int dyText); BOOL TBGetInfoTip(PTBSTATE ptb, LPTOOLTIPTEXT lpttt, LPTBBUTTONDATA pTBButton); extern const int g_dxButtonSep; BOOL TB_GetItemRect(PTBSTATE ptb, UINT uButton, LPRECT lpRect); #ifdef __cplusplus } #endif #endif // _TOOLBAR_H