// XTToolBar.h interface for the CXTToolBar class. // // This file is a part of the Xtreme Toolkit for MFC. // ©1998-2003 Codejock Software, All Rights Reserved. // // This source code can only be used under the terms and conditions // outlined in the accompanying license agreement. // // support@codejock.com // http://www.codejock.com // ////////////////////////////////////////////////////////////////////// #if !defined(__XTTOOLBAR_H__) #define __XTTOOLBAR_H__ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // forwards class CXTColorPopup; class CXTMenu; class CXTFrameWnd; class CXTToolBarCtrl; class CXTExpButton; class CXTExpMenuWnd; class CXTCustTbHandler; class CXTCustomControlBarInfo; class CXTCustomGroupItemInfo; class CXTCustomGroups; class CXTExpButton; typedef CTypedPtrArray XT_CUSTOMITEMS; class CXTIconMap; struct XT_DROPDOWNBUTTON; ////////////////////////////////////////////////////////////////////// // Summary: XT_HIDDENBUTTON is a stand alone helper structure class. It is used // to define dynamically hidden button info. struct XT_HIDDENBUTTON { int nWidth; // Width of the hidden button. }; ////////////////////////////////////////////////////////////////////// // Summary: XT_TBBUTTON is a TBBUTTON helper structure class. It is used to create // an XT_TBBUTTON structure object. struct XT_TBBUTTON : public TBBUTTON { // Summary: Constructs an XT_TBBUTTON object. XT_TBBUTTON(); // Summary: Destroys an XT_TBBUTTON object, handles cleanup and de-allocation. ~XT_TBBUTTON(); bool bOwnsButton; // true if this button is the owner of the control or dropdown. bool bBoldFont; // true if a bold font is to be set. bool bHidden; // true if the button is hidden. CWnd* pWndCtrl; // Points to a CWnd object that represents the control associated with this button. XT_DROPDOWNBUTTON* pDDButton; // Points to an XT_DROPDOWNBUTTON object that holds information about the dropdown button. }; ////////////////////////////////////////////////////////////////////// AFX_INLINE XT_TBBUTTON::XT_TBBUTTON() { bBoldFont = false; bHidden = false; bOwnsButton = true; pWndCtrl = NULL; pDDButton = NULL; } AFX_INLINE XT_TBBUTTON::~XT_TBBUTTON() { if (bOwnsButton) { SAFE_DELETE( pDDButton ); } } // Summary: CArray definition for popup dropped array. typedef CArray CXTPopupDroppedArray; // Summary: CList definition for XT_TBBUTTON structure list. typedef CList CXTTBButtonsList; // Summary: CMap definition for mapping button text to command ids. typedef CMap CXTBtnTextCmdMap; // Summary: CMap definition for mapping XT_HIDDENBUTTON structures. typedef CMap CXTHiddenButtonsMap; // NUMBERED LIST: ////////////////////////////////////////////////////////////////////// // Summary: CXTToolBar is a CXTControlBar derived class. Objects of the class CXTToolBar // are control bars that have a row of bitmapped buttons and optional separators. // The buttons can act like pushbuttons, check-box buttons, or radio buttons. // CXTToolBar objects are usually embedded members of frame-window objects // derived from the class CFrameWnd or CMDIFrameWnd. // // CXTToolBar::GetToolBarCtrl allows you to take advantage of the Windows // common control's support for toolbar customization and additional functionality. // CXTToolBar member functions give you most of the functionality of the // Windows common controls. However, when you call GetToolBarCtrl, you // can give your toolbars even more of the characteristics of Windows 95 // toolbars. When you call GetToolBarCtrl, it will return a reference to // a CXTToolBarCtrl object. See CXTToolBarCtrl for more information about // designing toolbars using Windows common controls. For more general // information about common controls, see Common Controls in the Windows // 95 SDK Programmer’s Reference. // // Visual C++ provides you with two methods to create a toolbar. To create // a toolbar resource using the Resource Editor, follow these steps: // [ol] // [li]Create a toolbar resource.[/li] // [li]Construct the CXTToolBar object.[/li] // [li]Call the Create, or CreateEx, function to create the Windows toolbar // and attach it to the CXTToolBar object.[/li] // [li]Call LoadToolBar to load the toolbar resource.[/li] // [/ol] // Otherwise, follow these steps: // [ol] // [li]Construct the CXTToolBar object.[/li] // [li]Call the Create, or CreateEx, function to create the Windows toolbar // and attach it to the CXTToolBar object.[/li] // [li]Call LoadBitmap to load the bitmap that contains the toolbar button // images.[/li] // [li]Call SetButtons to set the button style and associate each button // with an image in the bitmap.[/li] // [/ol] // All the button images in the toolbar are taken from one bitmap, which // must contain one image for each button. All images must be the same // size. The default is 16 pixels wide and 15 pixels high. Images must // be side by side in the bitmap. // // The SetButtons function takes a pointer to an array of control IDs and // an integer that specifies the number of elements in the array. The // function sets each button’s ID to the value of the corresponding element // of the array, and assigns each button an image index, which specifies // the position of the button’s image in the bitmap. If an array element // has the value ID_SEPARATOR, no image index is assigned. // // The order of the images in the bitmap is typically the order in which // they are drawn on the screen, but you can use the SetButtonInfo function // to change the relationship between image order and drawing order. // // All buttons in a toolbar are the same size. The default is 24 x 22 // pixels, in accordance with Windows Interface Guidelines for Software // Design. Any additional space between the image and button dimensions // is used to form a border around the image. // // Each button has one image. The various button states and styles (pressed, // up, down, disabled, disabled down, and indeterminate) are generated // from that one image. Although bitmaps can be any color, you can achieve // the best results with images in black and shades of gray. // // Toolbar buttons imitate pushbuttons by default. However, toolbar buttons // can also imitate check-box buttons or radio buttons. Check-box buttons // have three states: checked, cleared, and indeterminate. Radio buttons // have only two states: checked and cleared. // // To set an individual button or separator style without pointing to an // array, call GetButtonStyle to retrieve the style, and then call SetButtonStyle // instead of SetButtons. SetButtonStyle is most useful when you want // to change a button’s style at run time. // // To assign text to appear on a button, call GetButtonText to retrieve // the text to appear on the button, and then call SetButtonText to set // the text. // // To create a check-box button, assign it the style TBBS_CHECKBOX or use // a CCmdUI object’s SetCheck member function in an ON_UPDATE_COMMAND_UI // handler. Calling SetCheck turns a pushbutton into a check-box button. // Pass SetCheck an argument of 0 for unchecked, 1 for checked, or 2 for // indeterminate. // // To create a radio button, call a CCmdUI object’s SetRadio member function // from an ON_UPDATE_COMMAND_UI handler. Pass SetRadio an argument of // zero for unchecked or nonzero for checked. In order to provide a radio // group’s mutually exclusive behavior, you must have ON_UPDATE_COMMAND_UI // handlers for all of the buttons in the group. class _XT_EXT_CLASS CXTToolBar : public CXTControlBar { DECLARE_DYNAMIC(CXTToolBar) public: // Summary: Constructs a CXTToolBar object. CXTToolBar(); // Summary: Destroys a CXTToolBar object, handles cleanup and de-allocation. virtual ~CXTToolBar(); protected: BOOL m_bNoEntry; // Used with a rebar for window updates. BOOL m_bDisabledColor; // TRUE to draw a disabled button in color. BOOL m_bDelayedButtonLayout; // Used to manage when the button layout should be done. UINT m_uiLastCmd; // Last command ID used. DWORD m_dwDrawTextMask; // DrawText custom flags mask. DWORD m_dwDrawTextFlags; // DrawText custom flags. HRSRC m_hRsrcImageWell; // Handle to the loaded resource for the image well. CSize m_sizeImage; // Current image size. CSize m_sizeButton; // Current button size. CString m_strSubKey; // Registry name for the subkey. CString m_strValueName; // Registry name for the value. HBITMAP m_hbmImageWell; // Contains color mapped button images. HINSTANCE m_hInstImageWell; // Instance handle to load the image well from. CXTColorPopup* m_pColorPopup; // Pointer to a color popup window. CMapStringToPtr* m_pStringMap; // Used as CMapStringToUInt. CXTPopupDroppedArray m_arrPopupDropped; // array of popup item indices that currently have its popup dropped CXTTBButtonsList m_listTBButtons; // Contains the toolbar button array. CXTBtnTextCmdMap m_mapBtnTextCmd; // Toolbar button text to command map. CXTHiddenButtonsMap m_mapHiddenButtons; // Dynamically hidden buttons. private: bool m_bInvalidateOnMouseUp; bool m_bOwnsDropDowns; bool m_bCustomize; // TRUE to enable toolbar customization. bool m_bAdjusting; // Tells if toolbar customization is currently on bool m_bRestoringState; bool m_bFirstDrawPass; bool m_bForcedListStyle; bool m_bDropCommandText; // true to create text for commands drooped on this toolbar during toolbar customization bool m_bIdealSizeChanged; DWORD m_dwSignatureFreshenAfter; DWORD m_dwRestoreSignature; DWORD m_dwInitialCRC; DWORD m_cbOriginalState; LPVOID m_pvOriginalState; CXTExpButton* m_pExpButton; CXTCustTbHandler* m_pCustomHandler; public: // Input: iDroppedItem - Command ID of the button pressed. // bDropped - tells if this item is currently dropped down // Summary: This member function is used to set the command ID for the dropped menu // item. This is the command ID of the toolbar button that was pressed to // display the popup window. void SetDroppedItem(int iDroppedItem, bool bDropped); // BULLETED LIST: // Input: pParentWnd - Pointer to the window that is the toolbar’s parent. // dwStyle - The toolbar style. Additional toolbar styles supported are: // [ul] // [li]CBRS_TOP Control bar is at the top of the frame window.[/li] // [li]CBRS_BOTTOM Control bar is at the bottom of the frame // window.[/li] // [li]CBRS_NOALIGN Control bar is not repositioned when the parent is // resized.[/li] // [li]CBRS_TOOLTIPS Control bar displays tool tips.[/li] // [li]CBRS_SIZE_DYNAMIC Control bar is dynamic.[/li] // [li]CBRS_SIZE_FIXED Control bar is fixed.[/li] // [li]CBRS_FLOATING Control bar is floating.[/li] // [li]CBRS_FLYBY Status bar displays information about the button.[/li] // [li]CBRS_HIDE_INPLACE Control bar is not displayed to the user.[/li] // [/ul] // nID - The toolbar’s child-window ID. // Returns: Nonzero if successful, otherwise returns zero. // Summary: This member function creates a Windows toolbar, a child window, // and associates it with the CXTToolBar object. It also sets the toolbar // height to a default value. virtual BOOL Create(CWnd* pParentWnd,DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,UINT nID = AFX_IDW_TOOLBAR); // Input: pParentWnd - Pointer to the window that is the toolbar’s parent. // dwCtrlStyle - Additional styles for the creation of the embedded CXTToolBarCtrl // object. By default, this value is set to TBSTYLE_FLAT. For a complete // list of toolbar styles, see 'dwStyle'. // dwStyle - The toolbar style. See Toolbar Control and Button Styles in the Platform // SDK for a list of appropriate styles. // rcBorders - A CRect object that defines the widths of the toolbar window borders. // These borders are set to (0,0,0,0) by default, resulting in a toolbar // window with no borders. // nID - The toolbar’s child-window ID. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to create a Windows toolbar, a child window, // and associate it with the CXTToolBar object. It also sets the toolbar // height to a default value. // // Use CreateEx, instead of Create, when certain styles need to be // present during the creation of the embedded toolbar control. For // example, set 'dwCtrlStyle' to TBSTYLE_FLAT | TBSTYLE_TRANSPARENT to create // a toolbar that resembles the Internet Explorer 4 toolbars. virtual BOOL CreateEx(CWnd* pParentWnd,DWORD dwCtrlStyle = TBSTYLE_FLAT,DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,CRect rcBorders = CRect(0, 0, 0, 0),UINT nID = AFX_IDW_TOOLBAR); // Input: sizeButton - The size, in pixels, of each button. // sizeImage - The size, in pixels, of each image. // Summary: Call this member function to set the toolbar's buttons to the size, // in pixels, specified in 'sizeButton'. The 'sizeImage' parameter must contain // the size, in pixels, of the images in the toolbar's bitmap. The dimensions // in 'sizeButton' must be sufficient to hold the image plus 7 pixels extra // in width and 6 pixels extra in height. This function also sets the // toolbar height to fit the buttons. // // Only call this member function for toolbars that do not follow Windows // Interface Guidelines for Software Design recommendations for button // and image sizes. void SetSizes(SIZE sizeButton,SIZE sizeImage); // Input: sizeButton - The size, in pixels, of each button. // sizeImage - The size, in pixels, of each image. // Summary: This member function retrieves the current image size and button size. void GetSizes(SIZE& sizeButton,SIZE& sizeImage); // Input: cyHeight - The height, in pixels, of the toolbar. // Summary: This member function sets the toolbar's height to the value, in // pixels, specified in 'cyHeight'. // // After calling SetSizes, use this member function to override the // standard toolbar height. If the height is too small, the buttons will // be clipped at the bottom. // // If this function is not called, the framework uses the size of the // button to determine the toolbar height. void SetHeight(int cyHeight); // Input: lpszResourceName - Pointer to the resource name of the toolbar to be loaded. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to load the toolbar specified by 'lpszResourceName'. // See toolbar editor in the MSDN Visual C++ User’s Guide for more information // about creating a toolbar resource. BOOL LoadToolBar(LPCTSTR lpszResourceName); // Input: nIDResource - Resource ID of the toolbar to be loaded. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to load the toolbar specified by 'nIDResource'. // See toolbar editor in the MSDN Visual C++ User’s Guide for more information // about creating a toolbar resource. BOOL LoadToolBar(UINT nIDResource); // Input: lpszResourceName - Pointer to the resource name of the bitmap to be loaded. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to load the bitmap specified by 'lpszResourceName'. // The bitmap should contain one image for each toolbar button. If the // images are not of the standard size (16 pixels wide and 15 pixels high), // call SetSizes to set the button sizes and their images. BOOL LoadBitmap(LPCTSTR lpszResourceName); // Input: nIDResource - Resource ID of the bitmap to be loaded. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to load the bitmap specified by 'nIDResource'. // The bitmap should contain one image for each toolbar button. If the // images are not of the standard size (16 pixels wide and 15 pixels high), // call SetSizes to set the button sizes and their images. BOOL LoadBitmap(UINT nIDResource); // Input: hbmImageWell - Handle of a bitmap image that is associated with a toolbar. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to set the bitmap image for the toolbar. // For example, call SetBitmap to change the bitmapped image after the // user takes an action on a document that changes the action of a button. BOOL SetBitmap(HBITMAP hbmImageWell); // Input: lpIDArray - Pointer to an array of command IDs. It can be NULL to allocate empty // buttons. // nIDCount - Number of elements in the array pointed to by 'lpIDArray'. // Returns: Nonzero if successful, otherwise returns zero. // Summary: This member function sets each toolbar button's command ID to the // value specified by the corresponding element of the array 'lpIDArray'. // If an element of the array has the value ID_SEPARATOR, a separator // is created in the corresponding position of the toolbar. This function // also sets each button's style to TBBS_BUTTON and each separator's style // to TBBS_SEPARATOR, and assigns an image index to each button. The // image index specifies the position of the button’s image within the // bitmap. // // You do not need to account for separators in the bitmap because // this function does not assign image indexes for separators. If your // toolbar has buttons at positions 0, 1, and 3 and a separator at position // 2, the images at positions 0, 1, and 2 in your bitmap are assigned // to the buttons at positions 0, 1, and 3, respectively. // // If 'lpIDArray' is NULL, this function allocates space for the number // of items specified by 'nIDCount'. Use SetButtonInfo to set each item’s // attributes. BOOL SetButtons(const UINT* lpIDArray,int nIDCount); // Input: nIDFind - Command ID of a toolbar button. // Returns: The index of the button, or –1, if no button has the given command ID. // Summary: This member function returns the index of the first toolbar button, // starting at position 0, whose command ID matches 'nIDFind'. int CommandToIndex(UINT nIDFind) const; // Input: nIndex - Index of the item whose ID is to be retrieved. // Returns: The command ID of the button or separator specified by 'nIndex'. // Summary: This member function retrieves the command ID of the button or separator // specified by 'nIndex'. Separators return ID_SEPARATOR. UINT GetItemID(int nIndex) const; // Input: nIndex - Index of the item (button or separator) whose rectangle coordinates // are to be retrieved. // lpRect - Address of the RECT structure that will contain the item’s coordinates. // Summary: This member function fills the RECT structure whose address is contained // in 'lpRect' with the coordinates of the button or separator specified // by 'nIndex'. Coordinates are in pixels relative to the upper-left corner // of the toolbar. // // Use GetItemRect to get the coordinates of a separator you want to // replace with a combo box or other control. virtual void GetItemRect(int nIndex,LPRECT lpRect) const; // Input: nIndex - The index of the toolbar button or separator style to be retrieved. // Returns: The style of the button or separator specified by 'nIndex'. // Summary: Call this member function to retrieve the style of a button or separator // on the toolbar. A button’s style determines how the button appears // and how it responds to user input. See SetButtonStyle for examples // of button styles. UINT GetButtonStyle(int nIndex) const; // BULLETED LIST: // Input: nIndex - Index of the button or separator whose information is to be set. // nStyle - The button style. The following button styles are supported: // [ul] // [li]TBBS_BUTTON Standard pushbutton (default).[/li] // [li]TBBS_SEPARATOR Separator.[/li] // [li]TBBS_CHECKBOX Auto check-box button.[/li] // [li]TBBS_GROUP Marks the start of a group of buttons.[/li] // [li]TBBS_CHECKGROUP Marks the start of a group of check-box // buttons.[/li] // [/ul] // Summary: Call this member function to set the style of a button or separator, // or to group buttons. A button's style determines how the button appears // and how it responds to user input. // // Before calling SetButtonStyle, call the GetButtonStyle member function // to retrieve the button or separator style. void SetButtonStyle(int nIndex,UINT nStyle); // Input: nIndex - Index of the toolbar button or separator whose information is to be // retrieved. // nID - Reference to a UINT that is set to the command ID of the button. // nStyle - Reference to a UINT that is set to the style of the button. // iImage - Reference to an integer that is set to the index of the button’s image // within the bitmap. // Summary: This member function retrieves the control ID, style, and image // index of the toolbar button or separator at the location specified // by 'nIndex'. Those values are assigned to the variables referenced by // 'nID', 'nStyle', and 'iImage'. The image index is the position of the image // within the bitmap that contains images for all the toolbar buttons. // The first image is at position zero. // // If 'nIndex' specifies a separator, 'iImage' is set to the separator // width, in pixels. void GetButtonInfo(int nIndex,UINT& nID,UINT& nStyle,int& iImage) const; // BULLETED LIST: // Input: nIndex - Index of the button or separator whose information is to be set. // nID - The value to which the button’s command ID is set. // nStyle - The new button style. The following button styles are supported: // [ul] // [li]TBBS_BUTTON Standard pushbutton (default).[/li] // [li]TBBS_SEPARATOR Separator.[/li] // [li]TBBS_CHECKBOX Auto check-box button.[/li] // [li]TBBS_GROUP Marks the start of a group of buttons.[/li] // [li]TBBS_CHECKGROUP Marks the start of a group of check-box // buttons.[/li] // [/ul] // iImage - New index for the button’s image within the bitmap. // Summary: Call this member function to set the button's command ID, style, // and image number. For separators, which have the style TBBS_SEPARATOR, // this function sets the separator's width, in pixels, to the value stored // in 'iImage'. // See Also: CXTToolBar, CXTToolBar::LoadBitmap. void SetButtonInfo(int nIndex,UINT nID,UINT nStyle,int iImage); // Input: nIndex - Index of the text to be retrieved. // Returns: A CString object containing the button text. // Summary: Call this member function to retrieve the text that appears on a // button. CString GetButtonText(int nIndex) const; // Input: nIndex - Index of the text to be retrieved. // rString - A reference to a CString object that will contain the text to be retrieved. // Summary: Call this member function to retrieve the text that appears on a // button and fill the CString object with the string text. void GetButtonText(int nIndex,CString& rString) const; // Input: nIndex - Index of the button whose text is to be set. // lpszText - Points to the text to be set on a button. // Returns: Nonzero if successful, otherwise return zero. // Summary: Call this function to set the text on a button. BOOL SetButtonText(int nIndex,LPCTSTR lpszText); // Returns: A reference to a CXTToolBarCtrl object. // Summary: This member function allows direct access to the underlying common control. // // Use GetToolBarCtrl to take advantage of the functionality of the // Windows toolbar common control, and to take advantage of the support // CXTToolBarCtrl provides for toolbar customization. // // For more information about using common controls, see the article, // "Control Topics" in MSDN Visual C++ Programmer’s Guide and "Common // Controls" in the Windows 95 SDK Programmer’s Reference. CXTToolBarCtrl& GetToolBarCtrl() const; // Input: nID - Command identifier of the button in the toolbar. // Returns: Nonzero if the button is enabled, otherwise returns zero. // Summary: Call this function to determine whether the specified button, in // a toolbar control, is enabled. Consider calling GetState if you want // to retrieve more than one button state. BOOL IsButtonEnabled(int nID) const; // Input: nID - Command identifier of the button in the toolbar. // Returns: Nonzero if the button is checked, otherwise returns zero. // Summary: Call this function to determine whether the specified button, in // a toolbar control, is checked. Consider calling GetState if you want // to retrieve more than one button state. BOOL IsButtonChecked(int nID) const; // Input: nID - Command identifier of the button in the toolbar. // Returns: Nonzero if the button is pressed, otherwise returns zero. // Summary: Call this function to determine whether the specified button, in // a toolbar control, is pressed. Consider calling GetState if you want // to retrieve more than one button state. BOOL IsButtonPressed(int nID) const; // Input: nID - Command identifier of the button in the toolbar. // Returns: Nonzero if the button is hidden, otherwise returns zero. // Summary: Call this function to determine whether the specified button, in // a toolbar control, is hidden. Consider calling GetState if you want // to retrieve more than one button state. BOOL IsButtonHidden(int nID) const; // Input: nID - Command identifier of the button in the toolbar. // Returns: Nonzero if the button is indeterminate, otherwise returns zero. // Summary: Call this function to determine whether the specified button, in // a toolbar control, is indeterminate. Indeterminate buttons are displayed // grayed, such as the way the bold button on the toolbar of a word processor // would look when the text selected contains both bold and regular characters. // // Consider calling GetState if you want to retrieve more than one // button state. BOOL IsButtonIndeterminate(int nID) const; // Input: nID - Command identifier of the button in the toolbar. // nState - State flags. It can be a combination of the values listed for button // states in CXTToolBar::AddButtons. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to set the state for the specified button in // a toolbar control. // // This function is especially handy if you want to set more than one // of the button states. To just set one state, use one of the following // member functions: EnableButton, CheckButton, HideButton, Indeterminate, // or PressButton. BOOL SetState(int nID,UINT nState); // Input: nID - Command identifier of the button in the toolbar. // Returns: The button state information if successful, or returns –1, otherwise. // The button state information can be a combination of the values listed // in CXTToolBar::AddButtons. // Summary: Call this function to retrieve information about the state of the // specified button in a toolbar control, such as whether it is enabled, // pressed, or checked. // // This function is especially handy if you want to retrieve more than // one of the button states. To just retrieve one state, use one of the // following member functions: IsButtonEnabled, IsButtonChecked, IsButtonPressed, // IsButtonHidden, or IsButtonIndeterminate. However, the GetState member // function is the only way to detect the TBSTATE_WRAP button state. int GetState(int nID) const; // Input: nIndex - Zero-based index of the button for which to retrieve information. // pButton - Address of the TBBUTTON structure that is to receive a copy of the // button information. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to retrieve information about the specified button // in a toolbar control. // See Also: CXTToolBar::AddButtons for information about the TBBUTTON structure. BOOL GetButton(int nIndex,TBBUTTON* pButton) const; // Returns: An integer value that represents the count of the toolbar control buttons. // Summary: Call this function to retrieve a count of the buttons currently // in the toolbar control. int GetButtonCount() const; // Input: nIdButton - Button identifier. // rc - Address of a RECT structure that will receive the bounding rectangle // information. // Returns: Nonzero if successful, or zero otherwise. // Summary: This member function retrieves the bounding rectangle for a specified // toolbar button. BOOL GetRect(UINT nIdButton,RECT& rc) const; // Input: nSize - Size, in bytes, of the TBBUTTON structure. // Summary: Call this function to specify the size of the TBBUTTON structure. // If you wanted to store extra data in the TBBUTTON structure, you could // either derive a new structure from TBBUTTON, adding the members you // needed, or create a new structure that contains a TBBUTTON structure // as its first member. You would then call this function to tell the // toolbar control the size of the new structure. // // See Also: CXTToolBar::AddButtons for more information on the TBBUTTON // structure. void SetButtonStructSize(int nSize); // Input: pData - Address of the TBBUTTON structure that is to receive a copy of the // button information. // iButton - Zero-based index of the button for which to retrieve information. // Returns: A CSize value that contains the width and height values. // Summary: Call this member function to get the size of a toolbar button. virtual CSize GetButtonSize(TBBUTTON* pData,int iButton); // Input: size - Width and height, in pixels, of the buttons. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to set the size of the buttons in the toolbar // control. The button size must always be at least as large as the bitmap // size it encloses. // // This function must be called only before adding any bitmaps to the // toolbar. If the application does not explicitly set the button size, // it defaults to 24 by 22 pixels. BOOL SetButtonSize(CSize size); // Input: size - Width and height, in pixels, of the bitmapped images. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to set the size of the actual bitmapped images // to be added to a toolbar control. // // This function must be called only before adding any bitmaps to the // toolbar. If the application does not explicitly set the bitmap size, // it defaults to 16 by 15 pixels. BOOL SetBitmapSize(CSize size); // Returns: A pointer to the CToolTipCtrl object associated with this toolbar, or NULL, // if the toolbar has no associated tooltip control. // Summary: Call this function to retrieve the handle of the tooltip control, // if any, associated with the toolbar control. Since the toolbar control // normally creates and maintains its own tooltip control, most programs // do not need to call this function. CToolTipCtrl* GetToolTips() const; // Input: pTip - Pointer to the CToolTipCtrl object. // Summary: Call this function to associate a tooltip control with a toolbar // control. void SetToolTips(CToolTipCtrl* pTip); // Input: pOwnerWnd - Pointer to the CWnd or CWnd-derived object that will be the new owner // window for the toolbar control. // Summary: Call this function to set the owner window for the toolbar control. // The owner window is the window that receives notifications from the // toolbar. virtual void SetOwner(CWnd* pOwnerWnd); // Input: nRows - Requested number of rows. // bLarger - Tells whether to use more rows (TRUE) or fewer rows (FALSE) if the // toolbar cannot be resized to the requested number of rows. // lpRect - Points to the CRect object or RECT structure that will receive the // new bounding rectangle of the toolbar. // Summary: Call this function to ask the toolbar control to resize itself to // the requested number of rows. // // If the toolbar cannot resize itself to the requested number or rows, // it will resize itself to either the next larger or next smaller valid // size, depending on the value of 'bLarger'. If 'bLarger' is TRUE, the new // number of rows will be larger than the number requested. If 'bLarger' // is FALSE, the new number of rows will be smaller than the number requested. // // A given number of rows is valid for the toolbar, if the buttons // can be arranged such that all of the rows have the same number of buttons, // except perhaps the last row. For example, a toolbar that contains // four buttons could not be sized to three rows because the last two // rows would have to be shorter. If you attempted to size it to three // rows, you would get four rows if 'bLarger' was TRUE and two rows if 'bLarger' // was FALSE. // // If there are separators in the toolbar, the rules for when a given // number of rows is valid are more complicated. The layout is computed // such that button groups, buttons with a separator before the first // and the last button in the group, are never broken up on several rows // unless the group cannot fit on one row. // // If a group does not fit on one row, the next group will start on // the next row even if it would fit on the row where the large group // ended. The purpose of this rule is to make the separation between // large groups more noticeable. The resulting vertical separators are // counted as rows. // // Note, also, that the SetRows member function will always choose the // layout that results in the smallest toolbar size. Creating a toolbar // with the TBSTYLE_WRAPABLE style and then resizing the control will // simply apply the method outlined above given the width of the control. // // This function can only be called for toolbars that were created // with the TBSTYLE_WRAPABLE style. void SetRows(int nRows,BOOL bLarger,LPRECT lpRect); // Returns: The number of rows of buttons currently displayed on the toolbar. // Summary: Call this function to retrieve the number of rows of buttons currently // displayed by the toolbar control. Note that the number of rows will // always be one, unless the toolbar was created with the TBSTYLE_WRAPABLE // style. int GetRows() const; // Input: nIndex - The zero-based index of the button whose command ID is to be set. // nID - The command ID to set the selected button to. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to set the command identifier which will be sent // to the owner window when the specified button is pressed. BOOL SetCmdID(int nIndex,UINT nID); // Returns: A UINT that has the TBBF_LARGE flag set if the display can support // large toolbar bitmaps, clear otherwise. // Summary: Call this function to retrieve the bitmap flags from the toolbar. // You should call it after creating the toolbar but before adding bitmaps // to the toolbar. // // The return value indicates whether the display supports large bitmaps // or not. If the display supports large bitmaps, and if you choose to // use them, call SetBitmapSize and SetButtonSize before adding your large // bitmap using AddBitmap. UINT GetBitmapFlags() const; // Returns: A pointer to a CImageList object, or NULL if no disabled image list is set. // Summary: This member function implements the behavior of the Win32 message // TB_GETIMAGELIST, as described in the Platform SDK. HIMAGELIST GetImageList() const; // Returns: A DWORD containing a combination of toolbar control styles, as described // in the Platform SDK. // Summary: Call this member function to get the styles currently applied to // a toolbar control. DWORD GetToolbarStyle() const; // Input: hImgList - A handle to an HIMAGELIST object containing the images to be used // by the toolbar control to display button images in their default state. // bEnabled - FALSE if image list is set for disabled icons // Returns: A pointer to an HIMAGELIST handle that was // previously used by the toolbar control to display button images in // their default state. // Summary: This member function implements the behavior of the Win32 message // TB_SETIMAGELIST, as described in the Platform SDK. // // The MFC implementation of SetImageList uses a CImageList object // containing the toolbar control's button images, rather than a handle // to an image list. HIMAGELIST SetImageList(HIMAGELIST hImgList,BOOL bEnabled = TRUE); // Input: indent - The value specifying the indentation, in pixels. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this member function to set the indentation for the first button // in a toolbar control. BOOL SetIndent(int indent); // Input: dwStyle - A DWORD containing a combination of toolbar control styles, as described // in the Platform SDK. // Summary: Call this member function to set the styles for a toolbar control. void SetToolbarStyle(DWORD dwStyle); // Returns: The zero-based index of the hot item in a toolbar. // Summary: This member function implements the behavior of the Win32 message // TB_GETHOTITEM, as described in the Platform SDK. int GetHotItem() const; // Input: nIndex - The zero-based index of the button whose command ID is to be set. // Returns: true if the index matches an item that has its popup dropped down, or // false, if the item does not. // Summary: This member checks to see if the item at given position has its // popup dropped down. bool IsDroppedItem(int nIndex) const; // Returns: true if at least one item has its popup dropped down or false otherwise. // Summary: This member checks to see if there is at least one item that has its // popup dropped down. bool IsDroppedItem() const; // Input: iHot - The zero-based index number of the item that will be made hot. If // this value is -1, none of the items will be hot. // Returns: The index of the previous hot item, or -1 if there was no hot item. // Summary: This member function implements the behavior of the Win32 message // TB_SETHOTITEM, as described in the Platform SDK. int SetHotItem(int iHot); // Returns: A DWORD that represents the extended styles currently in use for the toolbar // control. // Summary: This member function implements the behavior of the Win32 message // TB_GETEXTENDEDSTYLE, as described in the Platform SDK. For a list of styles, // see Toolbar Extended Styles, in the Platform SDK. DWORD GetExtendedStyle() const; // Input: dwStyle - A value specifying the new extended styles. This parameter can be // a combination of the toolbar extended styles. // Returns: A DWORD that represents the previous extended styles. For a list of styles, // see Toolbar Extended Styles, in the Platform SDK. // Summary: This member function implements the behavior of the Win32 message // TB_SETEXTENDEDSTYLE, as described in the Platform SDK. DWORD SetExtendedStyle(DWORD dwStyle); // Input: ch - Accelerator character to be mapped. This character is the same // character that is underlined in the button's text. // nID - A reference to a UINT that receives the command identifier of // the button that corresponds to the accelerator specified in 'ch'. // Returns: Nonzero if successful, otherwise returns zero. // Summary: This member function implements the behavior of the Win32 message // TB_MAPACCELERATOR, as described in the Platform SDK. BOOL MapAccelerator(TCHAR ch,UINT& nID) const; // Input: p - A CPoint object that contains the x-coordinate of the hit test in // the x member and the y-coordinate of the hit test in the y member. // The coordinates are relative to the toolbar's client area. // Returns: An integer value indicating the location of a point on a toolbar. // If the value is zero or a positive value, this return value is the // zero-based index of the non-separator item in which the point lies. // If the return value is negative, the point does not lie within a button. // The absolute value of the return value is the index of a separator item // or the nearest non-separator item. // Summary: This member function implements the behavior of the Win32 message // TB_HITTEST, as described in the Platform SDK. int HitTest(CPoint p) const; // Input: nID - Command identifier of the button to enable or disable. // bEnable - TRUE to enable the button, or FALSE to disable the button. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to enable or disable the specified button in // a toolbar control. When a button has been enabled, it can be pressed // and checked. If you want to change more than one button state, consider // calling SetState instead. BOOL EnableButton(int nID,BOOL bEnable); // Input: nID - Command identifier of the button to check or clear. // bCheck - TRUE to check the button, or FALSE to clear it. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to check or clear a given button in a toolbar // control. When a button has been checked, it appears to have been pressed. // If you want to change more than one button state, consider calling // SetState instead. BOOL CheckButton(int nID,BOOL bCheck); // Input: nID - Command identifier of the button to press or release. // bPress - TRUE to press the specified button, or FALSE to release the specified // button. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to press or release the specified button in a // toolbar control. If you want to change more than one button state, // consider calling SetState instead. BOOL PressButton(int nID,BOOL bPress); // Input: nID - Command identifier of the button to hide or show. // bHide - TRUE to hide the button, or FALSE to show it. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to hide or show the specified button in a toolbar // control. If you want to change more than one button state, consider // calling SetState instead. BOOL HideButton(int nID,BOOL bHide); // Input: nID - Command identifier of the button whose indeterminate state is to be // set or cleared. // bIndeterminate - TRUE to set the indeterminate state for the specified button, or FALSE // to clear it. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to set or clear the indeterminate state of the // specified button in a toolbar control. Indeterminate buttons are displayed // grayed, such as the way the bold button on the toolbar of a word processor // would look when the text selected contains both bold and regular characters. // // If you want to change more than one button state, consider calling // SetState instead. BOOL Indeterminate(int nID,BOOL bIndeterminate); // BULLETED LIST: // Input: nNumButtons - Number of buttons to add. // lpButtons - Address of an array of TBBUTTON structures that contain information // about the buttons to add. There must be the same number of elements // in the array as buttons specified by 'nNumButtons'. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to add one or more buttons to a toolbar control. // // The 'lpButtons' pointer points to an array of TBBUTTON structures. // Each TBBUTTON structure associates the button being added with the // button’s style, image and/or string, command ID, state, and user-defined // data: // //
	//			 typedef struct _TBBUTTON {
    //			     int iBitmap;    // Zero-based index of the button image
    //			     int idCommand;  // Command to be sent when the button is pressed
    //			     BYTE fsState;   // Button state--see below
    //			     BYTE fsStyle;   // Button style--see below
    //			     DWORD dwData;   // Application-defined value
    //			     int iString;    // Zero-based index of the button label string
    //			 } TBBUTTON;
// // The members are as follows: // [ul] // [li]iBitmap Zero-based index of the button image. NULL if there is no // image for this button.[/li] // [li]idCommand Command identifier associated with the button. // This identifier is sent in a WM_COMMAND message when the button // is chosen. If the 'fsStyle' member has the TBSTYLE_SEP value, // this member must be zero.[/li] // [li]fsState Button state flags. It can be a combination // of the values listed below: // [ul] // [li]TBSTATE_CHECKED The button has the TBSTYLE_CHECKED // style and is being pressed.[/li] // [li]TBSTATE_ENABLED The button accepts user input. A // button that does not have this state does not accept user // input and is grayed.[/li] // [li]TBSTATE_HIDDEN The button is not visible and cannot // receive user input.[/li] // [li]TBSTATE_INDETERMINATE The button is grayed.[/li] // [li]TBSTATE_PRESSED The button is being pressed.[/li] // [li]TBSTATE_WRAP A line break follows the button. The // button must also have the TBSTATE_ENABLED state.[/li] // [/ul][/li] // [li]fsStyle Button style. It can be a combination of the // values listed below: // [ul] // [li]TBSTYLE_BUTTON Creates a standard push button.[/li] // [li]TBSTYLE_CHECK Creates a button that toggles between // the pressed and unpressed states each time the user clicks // it. The button has a different background color when it is // in the pressed state.[/li] // [li]TBSTYLE_CHECKGROUP Creates a check button that stays // pressed until another button in the group is pressed.[/li] // [li]TBSTYLE_GROUP Creates a button that stays pressed // until another button in the group is pressed.[/li] // [li]TBSTYLE_SEP Creates a separator, providing a small // gap between button groups. A button that has this style does // not receive user input.[/li] // [/ul][/li] // [li]dwData User-defined data.[/li] // [li]iString Zero-based index of the string to use as the // button’s label. NULL if there is no string for this button.[/li] // [/ul] // The image and/or string whose index you provide must have previously // been added to the toolbar control’s list using AddBitmap, AddString, // and/or AddStrings. // See Also: CXTToolBar::GetButton, CXTToolBar::SetButtonStructSize, // CXTToolBar::InsertButton BOOL AddButtons(int nNumButtons,LPTBBUTTON lpButtons); // Input: nIndex - Zero-based index of a button. This function inserts the new button // to the left of this button. // lpButton - Address of a TBBUTTON structure containing information about the button // to insert. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to insert a button in a toolbar control. // // The image and/or string whose index you provide must have previously // been added to the toolbar control’s list using AddBitmap, AddString, // and/or AddStrings. // See Also: CXTToolBar::AddButtons for a description of the TBBUTTON structure. BOOL InsertButton(int nIndex,LPTBBUTTON lpButton); // Input: nIndex - Zero-based index of the button to delete. // Returns: Nonzero if successful, otherwise returns zero. // Summary: Call this function to delete a button from the toolbar control. BOOL DeleteButton(int nIndex); // Summary: Call this function to restore the state of the toolbar control from // the location in the registry. void RestoreState(); // Summary: Call this function to save the state of the toolbar control to the // location in the registry. void SaveState(); // Summary: Call this function to display the Customize Toolbar dialog box. // This dialog box allows the user to customize the toolbar by adding // and deleting buttons. void Customize(); // Input: lpszStrings - Address of a buffer that contains one or more null-terminated // strings to add to the toolbar’s string list. The last string must // be terminated with two null characters. // Returns: The zero-based index of the first new string added if successful, otherwise // returns –1. // Summary: Call this function to add a new string or strings to the list of // strings available for a toolbar control. Strings in the buffer must // be separated by a null character. // // You must ensure that the last string has two null terminators. // To properly format a constant string, you might write it as: // //
	//			// one null added automatically
    //			lpszStrings = "Only one string to add\0";
// // or: // //
	//			// adds three strings with one call
    //			lpszStrings = "String 1\0String 2\0String 3\0";
// // You should not pass a CString object to this function since it is // not possible to have more than one null character in a CString. int AddStrings(LPCTSTR lpszStrings); // Summary: Call this function to resize the entire toolbar control. You should // call this function when the size of the parent window changes, or when // the size of the toolbar changes, such as when you set the button or // bitmap size, or add strings. void AutoSize(); //Operations public: // Returns: true to indicate success, or false to indicate failure. // Summary: Call this function to save all toolbars in the same list as // CMainFrame::m_wndToolBar. This function will also write the XT library // version number into the root key of the toolbar subsection, for future // compatibility reasons. bool SaveToolbars(); // Input: tbMaster - A pointer to a valid CXTToolBar object. // menuMaster - A pointer to a valid CXTMenu object. // Returns: The number of toolbars loaded successfully. // Summary: Call this function to load toolbars and their button layouts. This // function returns the number of toolbars successfully loaded. It is // called after the standard toolbar loading code and before // LoadBarState. First, the standard toolbars are loaded, so that their // variables, in CMainFrame, are properly initialized. Then, this function // adds any missing toolbars and resets the buttons of the standard toolbars // to what they were saved as. Finally, LoadBarState restores the positions // and so on. // // The two parameters passed in are the master menu and toolbar, from // which all icons and strings come. Both have the resource ID, IDR_XTMASTER, // in the main application resources. int LoadToolbars(CXTToolBar * tbMaster, CXTMenu * menuMaster); // Returns: A pointer to a CXTToolbar object. // Summary: This function allows you to gain access to the toolbar list when you // do not have a toolbar instance available. This is the reason it is static. // The reason for having a CXTToolbar list inside the toolbars is to allow // stepping only through toolbars, without having to step through the // control bar list and check each to see if it is a toolbar. // CXTFrameWnd::m_listControlBars is in fact where the pointer comes from. static CXTToolBar * GetTBListHead(); // Returns: true if it is being customized, otherwise returns false. // Summary: This member function tells if this toolbar is currently being customized. bool IsAdjustingToolbar() const; // Returns: TRUE to display the chevron button, otherwise returns FALSE. // Summary: This member function tells if this toolbar shall render an 'expansion // available' chevron button when the bar is only partially visible. // Default is to display the button. virtual BOOL IsExpansionButton(); // Returns: true if expansion button contains a 'Customize' // toolbar command, otherwise returns false. // Summary: This member function tells if expansion button contains a 'Customize' // toolbar command. bool IsExpansionCustomizes(); // Returns: TRUE if the expansion button will display a chevron, // otherwise returns FALSE. // Summary: This member function tells if the expansion button will display // a chevron showing more buttons available. Valid if IsExpansionButton() returns // TRUE. virtual BOOL IsExpansionChevron(); // Returns: true if the expansion chevron points horizontally, otherwise returns false. // Summary: This member function tells if the expansion chevron points horizontally. // Applicable if IsExpansionChevron() returns TRUE. virtual bool IsChevronHorizontal(); // Input: dimesionCurrent - Current total size of the buttons hidden. // dimensionMin - Current visible toolbar size. // bHorz - true if the toolbar is horizontally oriented. // Returns: An integer value that represents the current compaction of the buttons. // Summary: This member function is called by the toolbar to auto-hide toolbar // buttons when the framework is sizing. int CompactButtons(int dimesionCurrent,int dimensionMin,bool bHorz); // Input: currentDimension - Current total size of the buttons hidden. // dimesion - Current visible toolbar size. // bHorz - true if the toolbar is horizontally oriented. // Returns: An integer value that represents the current compaction of the buttons. // Summary: This member function is called by the toolbar to auto-display toolbar // buttons when the framework is sizing. int ExpandButtons(int currentDimension,int dimesion,bool bHorz); // Returns: A CSize object. // Summary: This member function calculates the minimum extent for this toolbar // (at least one button visible). CSize GetMinExtent(); // Input: dwFlags - Default DrawText() flags. // Returns: A DWORD value containing the adjusted flags. // Summary: This member function adjusts DrawText() flags, as specified with // SetDrawTextFlags(). // See also: TB_SETDRAWTEXTFLAGS. DWORD GetDrawTextFlags(DWORD dwFlags) const; // BULLETED LIST: // Input: dwDockStyle - Specifies whether the control bar supports docking and the sides of // its parent window to which the control bar can be docked, if supported. // It can be one or more of the following: // [ul] // [li]CBRS_ALIGN_TOP Allows docking at the top of the // client area.[/li] // [li]CBRS_ALIGN_BOTTOM Allows docking at the bottom of // the client area.[/li] // [li]CBRS_ALIGN_LEFT Allows docking on the left side // of the client area.[/li] // [li]CBRS_ALIGN_RIGHT Allows docking on the right side // of the client area.[/li] // [li]CBRS_ALIGN_ANY Allows docking on any side of the // client area.[/li] // [li]CBRS_FLOAT_MULTI Allows multiple control bars to // be floated in a single mini-frame window.[/li] // [/ul] // If 0 (that is, indicating no flags), the control bar will not // dock. // Summary: Call this function to enable a control bar to be docked. The sides // specified must match one of the sides enabled for docking in the destination // frame window, or the control bar cannot be docked to that frame window. void EnableDocking(DWORD dwDockStyle); // BULLETED LIST: // Input: dwDockStyle - Specifies whether the control bar supports docking and the sides of // its parent window to which the control bar can be docked, if supported. // It can be one or more of the following: // [ul] // [li]CBRS_ALIGN_TOP Allows docking at the top of the // client area.[/li] // [li]CBRS_ALIGN_BOTTOM Allows docking at the bottom of // the client area.[/li] // [li]CBRS_ALIGN_LEFT Allows docking on the left side // of the client area.[/li] // [li]CBRS_ALIGN_RIGHT Allows docking on the right side // of the client area.[/li] // [li]CBRS_ALIGN_ANY Allows docking on any side of the // client area.[/li] // [li]CBRS_FLOAT_MULTI Allows multiple control bars to // be floated in a single mini-frame window.[/li] // [/ul] // If 0 (that is, indicating no flags), the control bar will not // dock. // dwFlatStyle - Specifies the look of the splitters that are inside dockbars. // It can be one of the following: // [ul] // [li]CBRS_XT_NONFLAT Thick devstudio like non-flat splitters.[/li] // [li]CBRS_XT_SEMIFLAT Thin 3D non-flat splitters.[/li] // [li]CBRS_XT_FLAT Flat splitters.[/li] // [/ul] // Summary: Call this function to enable a control bar to be docked. The sides // specified must match one of the sides enabled for docking in the destination // frame window, or the control bar cannot be docked to that frame window. void EnableDockingEx(DWORD dwDockStyle,DWORD dwFlatStyle); // Input: hbmImageWell - An HBITMAP structure that contains the information for the new bitmap. // Returns: TRUE if successful, otherwise returns FALSE. // Summary: This member function replaces an existing bitmap with a new bitmap. BOOL AddReplaceBitmap(HBITMAP hbmImageWell); // Input: nIndex - The index at which to set the button. // pButton - Points to a valid TBBUTTON struct. // Summary: This member function replaces the button at the specified index. void SetButton(int nIndex,TBBUTTON* pButton); // Input: nIDButton - Command ID for the toolbar button. // nIDMenu - Resource ID of the popup menu to display. If none is specified, you // can use the CBRN_XT_DROPDOWN message that is sent from the toolbar // to its owner to handle the dropdown event. // bArrow - TRUE if an arrow is to be displayed. // Returns: TRUE if successful, otherwise returns FALSE. // Summary: Call this member function to add a dropdown arrow to a toolbar. // A dropdown arrow can be used to display a popup menu or popup window. BOOL AddDropDownButton(UINT nIDButton,UINT nIDMenu=0,BOOL bArrow=TRUE); // BULLETED LIST: // Input: nIDButton - Command ID for the toolbar button. // clrColor - An RGB value that represents the current color for the color picker. // clrDefault - An RGB value that represents the default color for the color picker. // dwPopup - Color picker style. Styles to be added can be combined by using the // bitwise OR (|) operator and can be one or more of the following: // [ul] // [li]CPS_XT_NOFILL The color picker will display a No Fill // button rather than the default Automatic Color button.[/li] // [li]CPS_XT_EXTENDED The color picker will display 40 extended // colors rather than the default 16 colors.[/li] // [li]CPS_XT_MORECOLORS The color picker will display a More // Colors button which will display a CXTColorDialog.[/li] // [li]CPS_XT_SHOW3DSELECTION Displays the color selection box // with a 3D raised border in CXTColorDialog.[/li] // [li]CPS_XT_SHOWHEXVALUE Displays the hex equivalent of the // selected color.[/li] // [/ul] // bShowColor - TRUE to display the color on the toolbar button. // bArrow - TRUE if an arrow is to be displayed. // Returns: TRUE if successful, otherwise returns FALSE. // Summary: Call this member function to add a dropdown arrow to a toolbar // that contains a color picker. A dropdown arrow can be used to display // a popup menu or popup window as well. BOOL AddDropDownButton(UINT nIDButton,COLORREF clrColor,COLORREF clrDefault=CLR_DEFAULT,DWORD dwPopup=CPS_XT_EXTENDED|CPS_XT_MORECOLORS,BOOL bShowColor=TRUE,BOOL bArrow=TRUE); // Input: nID - Command ID of the toolbar button. // Returns: A pointer to a valid XT_DROPDOWNBUTTON structure. // Summary: This member function is called to retrieve a pointer to the XT_DROPDOWNBUTTON // for the toolbar button specified by 'nID'. XT_DROPDOWNBUTTON* FindDropDownButton(UINT nID); // Input: bStretch - Indicates whether the bar should be stretched to the size of the frame. // The 'bStretch' parameter is nonzero when the bar is not a docking bar // (not available for docking) and is zero when it is docked or floating // (available for docking). // bHorz - Indicates that the bar is horizontally or vertically oriented. The // 'bHorz' parameter is nonzero if the bar is horizontally oriented, and // is zero if it is vertically oriented. // Returns: The control bar size, in pixels, of a CSize object. // Summary: Call this member function to calculate the horizontal size of a // control bar. Control bars, such as toolbars, can stretch horizontally // or vertically to accommodate the buttons contained in the control bar. virtual CSize CalcFixedLayout(BOOL bStretch,BOOL bHorz); // BULLETED LIST: // Input: nLength - The requested dimension of the control bar, either horizontal or vertical, // depending on 'nMode'. // nMode - The following predefined flags are used to determine the height and // width of the dynamic control bar. Use the bitwise-OR (|) operator to // combine the flags. // [ul] // [li]LM_STRETCH Indicates whether the control bar should be // stretched to the size of the frame. Set if the bar is not a // docking bar (not available for docking). Not set when the bar // is docked or floating (available for docking). If set, LM_STRETCH // ignores 'nLength' and returns dimensions based on the LM_HORZ // state. LM_STRETCH works similarly to the 'bStretch' parameter // used in CalcFixedLayout. See that member function for more information // about the relationship between stretching and orientation.[/li] // [li]LM_HORZ Indicates that the bar is horizontally or vertically // oriented. Set if the bar is horizontally oriented, and if it // is vertically oriented, it is not set. LM_HORZ works similarly // to the 'bHorz' parameter used in CalcFixedLayout. See that member function // for more information about the relationship between stretching // and orientation.[/li] // [li]LM_MRUWIDTH Most Recently Used Dynamic Width. Ignores the // 'nLength' parameter and uses the remembered most recently used // width.[/li] // [li]LM_HORZDOCK Horizontal Docked Dimensions. Ignores the 'nLength' // parameter and returns the dynamic size with the largest width.[/li] // [li]LM_VERTDOCK Vertical Docked Dimensions. Ignores the 'nLength' // parameter and returns the dynamic size with the largest height.[/li] // [li]LM_LENGTHY Set if 'nLength' indicates height (Y-direction) // instead of width.[/li] // [li]LM_COMMIT Resets LM_MRUWIDTH to the current width of the floating // control bar.[/li] // [/ul] // Returns: A CSize object that represents the control bar size, in pixels. // Summary: The framework calls this member function to calculate the dimensions // of a dynamic toolbar. Override this member function to provide your // own dynamic layout in classes you derive from CControlBar. MFC classes // derived from CControlBar, such as CToolbar, override this member function // and provide their own implementation. virtual CSize CalcDynamicLayout(int nLength,DWORD nMode); // BULLETED LIST: // Input: point - Specifies the x- and y-coordinate of the cursor. These coordinates // are always relative to the upper-left corner of the window. // pTI - A pointer to a TOOLINFO structure. The following structure values // are set by default: // [ul] // [li]hwnd = m_hWnd Handle to a window.[/li] // [li]uId = (UINT)hWndChild Handle to a child window.[/li] // [li]uFlags |= TTF_IDISHWND Handle of the tool.[/li] // [li]lpszText = LPSTR_TEXTCALLBACK Pointer to the string that // is to be displayed in the specified window.[/li] // [/ul] // Returns: 1, if the tooltip control was found, or -1, if the tooltip control was not found. // Summary: The framework calls this member function to determine whether a point // is in the bounding rectangle of the specified tool. If the point is // in the rectangle, it retrieves information about the tool. If the area // with which the tooltip is associated is not a button, OnToolHitTest // sets the structure flags to TTF_NOTBUTTON and TTF_CENTERTIP. Override // OnToolHitTest to provide different information than the default provides. // See TOOLINFO, in the Win32 SDK Programmer’s Reference, for more information // about the structure. virtual INT_PTR OnToolHitTest(CPoint point,TOOLINFO* pTI) const; // Input: pTarget - A pointer to the main frame window of the application. This pointer // is used for routing update messages. // bDisableIfNoHndler - Flag that indicates whether a control that has no update handler should // be automatically displayed as disabled. // Summary: This member function is called by the framework to update the status // of the toolbar or status bar. To update an individual button or pane, // use the ON_UPDATE_COMMAND_UI macro in your message map to set an update // handler appropriately. See ON_UPDATE_COMMAND_UI for more information // about using this macro. OnUpdateCmdUI is called by the framework when // the application is idle. The frame window to be updated must be a child // window, at least indirectly, of a visible frame window. OnUpdateCmdUI // is an advanced overridable. virtual void OnUpdateCmdUI(CFrameWnd* pTarget,BOOL bDisableIfNoHndler); // Input: pWnd - A pointer to a valid CWnd object. // bBoldFont - true if the newly inserted control should have a bold font. // Returns: TRUE if successful, otherwise returns FALSE. // Summary: This member function is called to insert a control into a toolbar. // You can add a control to your toolbar by adding a place holder button // to your toolbar. This button will represent where in the toolbar you // want your control to be placed. Once you have done this, you can create // your control using the command ID for the toolbar button you just created. virtual BOOL InsertControl(CWnd* pWnd,bool bBoldFont=false); // Input: bEnable - TRUE to enable customization. // Summary: Call this member function to enable or disable customization for // the toolbar. If enabled you can right click on the toolbar or choose // the expansion button at the end of the toolbar to display the customize // button. void EnableCustomization(bool bEnable=true); // Returns: true if customization has been enabled, otherwise returns false. // Summary: Call this member function to determine if customization is enabled // for the toolbar. bool IsCustomizable() const; // obsolete void SetCustomBar(bool bCustomBar=true); bool GetCustomBar() const; // Input: bDisabledColor - TRUE to display disabled toolbar buttons in color. // Summary: Call this member function to display disabled toolbar icons colorized. void ColorizeDisabledItems(BOOL bDisabledColor=TRUE); // Input: nIdButton - Command ID of a toolbar button. // Returns: An integer value index from the toolbar's image list for the specified button. // Summary: Call this member function to retrieve the index into the toolbar's // image list for the button specified by 'nIdButton'. int GetBitmap(UINT nIdButton) const; // Returns: A CSize object. // Summary: This member function retrieves the amount of horizontal and vertical // space (padding) around the text and image displayed on the buttons // for this toolbar. CSize GetPadding() const; // Input: size - A CSize object. // Returns: A CSize object. // Summary: This member function sets the amount of horizontal and vertical // space (padding) around the text and image displayed on the buttons // for this toolbar. CSize SetPadding(CSize size); // Returns: TRUE if successful, otherwise returns FALSE. // Summary: Call this member function to auto-size the toolbar. This will adjust // the toolbar to the correct size whenever a control or text has been // added. BOOL AutoSizeToolbar(); // Input: bWithText - Buttons shall be created with text and icons if true, or with an // icon only if false. // Summary: This member function sets a flag telling that command buttons dropped // during toolbar customization on this toolbar shall be created with // text and icon or with icon only. void SetDropCommandWithText(bool bWithText); // Returns: An RGB color value. // Summary: This member function is used to determine the correct background fill // color to be used during paint operations. virtual COLORREF GetBackgroundColor() const; // Input: pPopup - Points to a valid CXTMenu object. // rect - Size and location of the popup menu. // Summary: This member function is used to display a popup menu associated with a // toolbar button drop arrow. void TrackMenuPopup(CXTMenu* pPopup,const CRect& rect); // Input: rcExclude - Area that the popup should not overlap. // szPopup - Size of the popup. // Returns: A CPoint object that represents the tracking point for the popup associated // with the drop down toolbar button. // Summary: This member function is called to determine the popup tracing point for a // toolbar button that has a popup window. CPoint ComputePopupTrackPoint(CRect rcExclude,CSize szPopup); protected: // Input: pDropButton - A pointer to a valid XT_DROPDOWNBUTTON structure. // rect - A CRect object. // Returns: A pointer to the color picker popup window just created. // Summary: This member function creates and initializes a color picker popup window. virtual CXTColorPopup* CreateNewColorPopup(XT_DROPDOWNBUTTON* pDropButton,CRect rect); // Input: pRBBI - Pointer to a rebar bar descriptor to use to fill in the sizing information. // bHorz - true if this toolbar must be oriented horizontally. // Returns: true if successful, otherwise returns false. // Summary: This notification is called whenever this toolbar is added to a CXTReBar // object. virtual bool OnAddedToRebar(REBARBANDINFO* pRBBI,bool bHorz); // Input: pInfo - Descriptor of the band. // bHorz - true if the toolbar is horizontally oriented. // Summary: This member function is called whenever this toolbar is embedded in // a CXTReBar control that has just resized the band in which this toolbar // resides. virtual void OnRebarBandResized(XT_REBARSIZECHILDINFO* pInfo,bool bHorz); // Returns: true to enable full window drag, or false to use the wire frame. // Summary: This member function tells if this toolbar will be visualized when // dragging or the system will render it with a wire frame. Default implementation // uses full window drag. virtual bool IsFullWindowDrag(); // Input: bMode - true to enable toolbar customization, or false to disable it. // Summary: This member function is called to turn on or off toolbar customization mode. virtual void SetCustMode(bool bMode); // Input: pInfo - Pointer to a valid CXTCustomControlBarInfo object. // Summary: This member function fills in supported customizable features. virtual void GetCustomBarInfo(CXTCustomControlBarInfo* pInfo); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Ignore: //{{AFX_VIRTUAL(CXTToolBar) public: virtual void OnPaint(); virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); //}}AFX_VIRTUAL virtual void PositionControl(CWnd* pWnd); virtual void PositionControls(); virtual bool IsFillToolBarClientRect(); virtual void DrawSeparators(CDC* pDC); virtual BOOL DrawItem(CDC* pDC, LPNMCUSTOMDRAW lpNMCD); virtual void EraseWrappedSeparators(CDC* pDC); virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle); virtual void OnDropDownButton(NMTOOLBAR* pNMTB, UINT nID, CRect rect); virtual bool HasCmdHandlers(CWnd* pWnd); // Ignore: //{{AFX_MSG(CXTToolBar) afx_msg UINT OnNcHitTest(CPoint point); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp); afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos); afx_msg void OnSysColorChange(); afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDestroy(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); //}}AFX_MSG afx_msg LRESULT OnSetDrawTextFlags(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetButtonSize(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetBitmapSize(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnPreserveZeroBorderHelper(WPARAM wParam, LPARAM lParam); afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarBtnDropDown(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarBeginAdjust(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarCustomHelp(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarEndAdjust(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarGetButtonInfo(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarQueryDelete(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarQueryInsert(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarReset(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarChange(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnToolBarHotItemChange(NMHDR* pNMHDR, LRESULT* pResult); afx_msg LRESULT OnSelEndOK(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnCloseUp(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnFreshenAfter(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() friend CXTExpButton; friend CXTExpMenuWnd; friend CXTCustTbHandler; // Input: nIndex - Index of the toolbar button being queried // Returns: A CXTCustomGroupItemInfo object. // Summary: Create new custom group item descriptor. // Used during toolbar customization, override to pass your custom data virtual CXTCustomGroupItemInfo* GetCustomItemInfo(int nIndex); // Input: pInfo - data being dragged // nIndex - position at which the button must be created // Summary: Do data drop, implementation must create a toolbar button // out of data provided at a given position virtual void DropCustomItemInfo(CXTCustomGroupItemInfo* pInfo, int nIndex); // Input: lpszText - A NULL terminated strig. // idCommand - Command ID. // Returns: Returns an index into the string table. // Summary: Caches a string as a text assigned to button with given command ID // result retruned is suitable to be assigned to TBBUTTON.iString member int CacheString(LPCTSTR lpszText, UINT idCommand); // Input: button - Pointer to a TBBUTTON structure. // strLabel - NULL terminated string representing the button text. // Summary: Default implementation of how to add some text to a button created during // toolbar customization virtual void AddCustomButtonText(TBBUTTON* button, const CString& strLabel); int WrapToolBar(TBBUTTON* pData, int nCount, int nWidth); CSize CalcLayout(DWORD nMode, int nLength = -1); CSize CalcSize(TBBUTTON* pData, int nCount); void MoveExpButton(int nDimension, bool bHorz); void ResetHiddenButtons(); void CopyHiddenButtons(CXTToolBar* other, int preferredWidth); void SizeToolBar(TBBUTTON* pData, int nCount, int nLength, BOOL bVert = FALSE); void Layout(); void LoadButtonInfo(); LRESULT OnSetSizeHelper(CSize& size, LPARAM lParam); XT_DROPDOWNBUTTON* InitDropDownButton(UINT nIDButton, BOOL bArrow); void ResetCustomizations(); void DoRestoreState(); void DeferFreshenAfter(); void ResetFreshenAfter(); void TrackMenuBarPopup(DWORD dwMenuBarPopupID, const CRect& rect); void SaveToolBarState(LPCTSTR pszSubKey, LPCTSTR pszValueName); bool LoadToolBarState(LPCTSTR pszSubKey, LPCTSTR pszValueName); void GetCurrentBarState(LPVOID* ppvState, DWORD* pcbState); bool SetCurrentBarState(LPVOID pvData, DWORD cbData); void GetIcons(CXTIconMap* pMap); void RegisterCustomizeAPI(bool bRegister); bool StartCustomDrag(CPoint point); void DoCustomDrag(CPoint point); void SetListStyleIfNoText(); void ResolveCommandIcons(); bool ReportOriginalCustomGroups(XT_CUSTOMITEMS& items); CXTCustomGroupItemInfo* GetCustomItemInfo(const TBBUTTON& button); CXTCustomGroupItemInfo* GetCustomButtonInfo(const TBBUTTON& button); CXTCustomGroupItemInfo* GetCustomControlInfo(const TBBUTTON& button); void NoteIdealSizeChanged(); virtual void ReportCustomGroups(CXTCustomGroups& groups); bool IsSeparator(int nIndex) const; static bool IsSeparator(const TBBUTTON& button); static bool IsControl(const TBBUTTON& button); int LocateHit(const CPoint& point); }; ////////////////////////////////////////////////////////////////////// AFX_INLINE bool CXTToolBar::IsCustomizable() const { return m_bCustomize; } AFX_INLINE void CXTToolBar::SetCustomBar(bool bCustomBar/*=true*/) { EnableCustomization(bCustomBar); } AFX_INLINE bool CXTToolBar::GetCustomBar() const { return IsCustomizable(); } AFX_INLINE void CXTToolBar::ColorizeDisabledItems(BOOL bDisabledColor) { ASSERT(::IsWindow(m_hWnd)); m_bDisabledColor = bDisabledColor; } AFX_INLINE BOOL CXTToolBar::LoadToolBar(UINT nIDResource) { ASSERT(::IsWindow(m_hWnd)); return LoadToolBar(MAKEINTRESOURCE(nIDResource)); } AFX_INLINE BOOL CXTToolBar::LoadBitmap(UINT nIDResource) { ASSERT(::IsWindow(m_hWnd)); return LoadBitmap(MAKEINTRESOURCE(nIDResource)); } AFX_INLINE CXTToolBarCtrl& CXTToolBar::GetToolBarCtrl() const { ASSERT(::IsWindow(m_hWnd)); return *(CXTToolBarCtrl*)this; } AFX_INLINE BOOL CXTToolBar::EnableButton(int nID, BOOL bEnable) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0)); } AFX_INLINE BOOL CXTToolBar::CheckButton(int nID, BOOL bCheck) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0)); } AFX_INLINE BOOL CXTToolBar::PressButton(int nID, BOOL bPress) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0)); } AFX_INLINE BOOL CXTToolBar::HideButton(int nID, BOOL bHide) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0)); } AFX_INLINE BOOL CXTToolBar::Indeterminate(int nID, BOOL bIndeterminate) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0)); } AFX_INLINE BOOL CXTToolBar::IsButtonEnabled(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONENABLED, nID, 0); } AFX_INLINE BOOL CXTToolBar::IsButtonChecked(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONCHECKED, nID, 0); } AFX_INLINE BOOL CXTToolBar::IsButtonPressed(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONPRESSED, nID, 0); } AFX_INLINE BOOL CXTToolBar::IsButtonHidden(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONHIDDEN, nID, 0); } AFX_INLINE BOOL CXTToolBar::IsButtonIndeterminate(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONINDETERMINATE, nID, 0); } AFX_INLINE BOOL CXTToolBar::SetState(int nID, UINT nState) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_SETSTATE, nID, MAKELPARAM(nState, 0)); } AFX_INLINE int CXTToolBar::GetState(int nID) const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_GETSTATE, nID, 0L); } AFX_INLINE BOOL CXTToolBar::AddButtons(int nNumButtons, LPTBBUTTON lpButtons) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons); } AFX_INLINE BOOL CXTToolBar::InsertButton(int nIndex, LPTBBUTTON lpButton) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_INSERTBUTTON, nIndex, (LPARAM)lpButton); } AFX_INLINE BOOL CXTToolBar::DeleteButton(int nIndex) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_DELETEBUTTON, nIndex, 0); } AFX_INLINE int CXTToolBar::GetButtonCount() const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_BUTTONCOUNT, 0, 0L); } AFX_INLINE int CXTToolBar::AddStrings(LPCTSTR lpszStrings) { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_ADDSTRING, 0, (LPARAM)lpszStrings); } AFX_INLINE void CXTToolBar::SetButtonStructSize(int nSize) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TB_BUTTONSTRUCTSIZE, nSize, 0L); } AFX_INLINE BOOL CXTToolBar::SetButtonSize(CSize size) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPARAM(size.cx, size.cy)); } AFX_INLINE BOOL CXTToolBar::SetBitmapSize(CSize size) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPARAM(size.cx, size.cy)); } AFX_INLINE void CXTToolBar::AutoSize() { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TB_AUTOSIZE, 0, 0L); } AFX_INLINE CToolTipCtrl* CXTToolBar::GetToolTips() const { ASSERT(::IsWindow(m_hWnd)); return (CToolTipCtrl*)CWnd::FromHandle((HWND)::SendMessage(m_hWnd, TB_GETTOOLTIPS, 0, 0L)); } AFX_INLINE void CXTToolBar::SetToolTips(CToolTipCtrl* pTip) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TB_SETTOOLTIPS, (WPARAM)pTip->GetSafeHwnd(), 0L); } AFX_INLINE void CXTToolBar::SetRows(int nRows, BOOL bLarger, LPRECT lpRect) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect); } AFX_INLINE int CXTToolBar::GetRows() const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_GETROWS, 0, 0L); } AFX_INLINE BOOL CXTToolBar::SetCmdID(int nIndex, UINT nID) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_SETCMDID, nIndex, nID); } AFX_INLINE UINT CXTToolBar::GetBitmapFlags() const { ASSERT(::IsWindow(m_hWnd)); return (UINT) ::SendMessage(m_hWnd, TB_GETBITMAPFLAGS, 0, 0L); } AFX_INLINE BOOL CXTToolBar::SetIndent(int indent) { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_SETINDENT, indent, 0L); } AFX_INLINE HIMAGELIST CXTToolBar::GetImageList() const { ASSERT(::IsWindow(m_hWnd)); return (HIMAGELIST) ::SendMessage(m_hWnd, TB_GETIMAGELIST, 0, 0L); } AFX_INLINE int CXTToolBar::GetBitmap(UINT nIdButton) const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_GETBITMAP, nIdButton, 0L); } AFX_INLINE DWORD CXTToolBar::GetExtendedStyle() const { ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, TB_GETEXTENDEDSTYLE, 0, 0L); } AFX_INLINE DWORD CXTToolBar::SetExtendedStyle(DWORD dwStyle) { ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, TB_SETEXTENDEDSTYLE, 0, dwStyle); } AFX_INLINE BOOL CXTToolBar::GetRect(UINT nIdButton, RECT& rc) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_GETRECT, nIdButton, (LPARAM)&rc); } AFX_INLINE DWORD CXTToolBar::GetToolbarStyle() const { ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, TB_GETSTYLE, 0, 0L); } AFX_INLINE void CXTToolBar::SetToolbarStyle(DWORD dwStyle) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TB_SETSTYLE, 0, dwStyle); } AFX_INLINE int CXTToolBar::HitTest(CPoint p) const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_HITTEST, 0, (LPARAM)&p); } AFX_INLINE int CXTToolBar::GetHotItem() const { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, TB_GETHOTITEM, 0, 0L); } AFX_INLINE int CXTToolBar::SetHotItem(int iHot) { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, TB_SETHOTITEM, iHot, 0L); } AFX_INLINE BOOL CXTToolBar::MapAccelerator(TCHAR ch, UINT& nID) const { ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, TB_MAPACCELERATOR, (WPARAM)ch, (LPARAM)&nID); } AFX_INLINE CSize CXTToolBar::GetPadding() const { ASSERT(::IsWindow(m_hWnd)); return (CSize)(DWORD)::SendMessage(m_hWnd, TB_GETPADDING, 0, 0L); } AFX_INLINE CSize CXTToolBar::SetPadding(CSize size) { ASSERT(::IsWindow(m_hWnd)); return (CSize)(DWORD)::SendMessage(m_hWnd, TB_SETPADDING, 0, MAKELPARAM(size.cx,size.cy)); } AFX_INLINE void CXTToolBar::GetSizes(SIZE& sizeButton, SIZE& sizeImage) { sizeImage = m_sizeImage, sizeButton = m_sizeButton; } AFX_INLINE bool CXTToolBar::IsAdjustingToolbar() const { return m_bAdjusting; } AFX_INLINE void CXTToolBar::SetDropCommandWithText(bool bWithText) { m_bDropCommandText = bWithText; } ////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // #if !defined(__XTTOOLBAR_H__)