// XTToolBarPopupWnd.h : header file // // 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(__POPUPWND_H__) #define __POPUPWND_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // forwards class CXTToolBarPopupWnd; ////////////////////////////////////////////////////////////////////// // Summary: CXTPopupWndToolbar is a CXTToolBar derived class. It is a toolbar // custom tailored for usage in a toolbar popup window. class _XT_EXT_CLASS CXTPopupWndToolbar : public CXTToolBar { DECLARE_DYNAMIC(CXTPopupWndToolbar) CXTToolBarPopupWnd* m_pPopup; // Back reference to the toolbar expansion popup. public: // Summary: Constructs a CXTPopupWndToolbar object. CXTPopupWndToolbar(); // Returns: An RGB value. // Summary: This member function defines the background color as that used in popup // windows. virtual COLORREF GetBackgroundColor() const; // Returns: true if successful, otherwise returns false. // Summary: This member function tells the base class to always fill the background // of this toolbar with a predefined popup window background color. virtual bool IsFillToolBarClientRect(); friend CXTToolBarPopupWnd; }; ////////////////////////////////////////////////////////////////////// AFX_INLINE CXTPopupWndToolbar::CXTPopupWndToolbar() { m_pPopup = 0; } ////////////////////////////////////////////////////////////////////// // Summary: CXTToolBarPopupWndHook is a CXTWndHook derived class. It is used to // hook a toolbar owner frame, and to figure out when to close the popup. // Its WindowProc() filters out the commands the owner frame receives // and, if applicable, sends a request for the toolbar expansion popup // to close. class _XT_EXT_CLASS CXTToolBarPopupWndHook : public CXTWndHook { DECLARE_DYNAMIC(CXTToolBarPopupWndHook) bool m_bCreated; // true if parent popup completed creation CXTToolBarPopupWnd* m_pPopup; // Back reference to the toolbar expansion popup. public: // Summary: Constructs a CXTToolBarPopupWndHook object. CXTToolBarPopupWndHook(); // Input: message - Specifies the Windows message to be processed. // wParam - Provides additional information used in processing the message. // The parameter value depends on the message. // lParam - Provides additional information used in processing the message. // The parameter value depends on the message. // Summary: This member function filters messages, as required, to synch up the // hidden toolbar popup. virtual LRESULT WindowProc(UINT message,WPARAM wParam,LPARAM lParam); friend CXTToolBarPopupWnd; }; ////////////////////////////////////////////////////////////////////// // Summary: CXTToolBarPopupWnd is a CWnd derived class. It is used to display a // popup window to be activated when the user presses the down arrow on // a toolbar. The popup window contains a separate toolbar that will swap // out the image with the newly selected command. Works similar to MS Word's // border dropdown button. class _XT_EXT_CLASS CXTToolBarPopupWnd : public CWnd { DECLARE_DYNAMIC(CXTToolBarPopupWnd) public: // Input: iCmdID - Command ID that is currently active for the popup window. // Summary: Constructs a CXTToolBarPopupWnd object. CXTToolBarPopupWnd(int& iCmdID); // Summary: Destroys a CXTToolBarPopupWnd object, handles cleanup and de-allocation. virtual ~CXTToolBarPopupWnd(); protected: int& m_iCmdID; // Command ID of the button that created this window. UINT m_uToolbarID; // Resource ID of the parent toolbar. CRect m_rcExclude; // Exclusion rectangle for drawing adjacent borders. CXTToolBar* m_pWndParent; // Pointer to the parent toolbar. CXTPopupWndToolbar m_wndToolBar; // Nested toolbar that is displayed when this window is created. CXTToolBarPopupWndHook m_hook; // Message hook that properly closes this window. public: // Input: pParent - Points to a valid parent toolbar. // uToolbarID - Resource ID of the toolbar to display as a popup. // iNumCols - Number of columns to display when the toolbar is displayed. // Returns: TRUE if successful, otherwise returns FALSE. // Summary: Call this member function to create a CXTToolBarPopupWnd object. This // can be done from a CBRN_XT_DROPDOWN after a dropdown arrow has been // added to your toolbar. To do so, add a dropdown button to your toolbar. // The button image should represent one of the images contained in the // toolbar popup window, for example: // //
m_wndToolBar.AddDropDownButton(ID_BDR_OUTSIDE);// // Once you have done this you can add a CBRN_XT_DROPDOWN message handler // to determine when the toolbar button has been dropped, for example: // //
BEGIN_MESSAGE_MAP(CMainFrame, CXTFrameWnd)
// {{AFX_MSG_MAP(CMainFrame)
// ON_MESSAGE(CBRN_XT_DROPDOWN, OnToolbarDropDown)
// //}}AFX_MSG_MAP
// END_MESSAGE_MAP()
//
// LRESULT CMainFrame::OnToolbarDropDown(WPARAM wParam, LPARAM lParam)
// {
// NMTOOLBAR* pNMTB = ( NMTOOLBAR* )wParam;
// CRect* pRect = ( CRect* )lParam;
//
// if ( pNMTB->iItem == m_uCmdID )
// {
// CXTToolBarPopupWnd* pwndPopup = new CXTToolBarPopupWnd( m_uCmdID );
// pwndPopup->Create( &m_wndToolBar, IDR_BORDERS, 5 );
// return 1;
// }
//
// return 0;
// }
//
// The toolbar command range should be sequential so you can add a command
// range handler for your popup toolbar, for example:
//
// BEGIN_MESSAGE_MAP(CMainFrame, CXTFrameWnd)
// {{AFX_MSG_MAP(CMainFrame)
// ON_COMMAND_EX_RANGE(ID_BDR_OUTSIDE, ID_BDR_INSIDE_VERT, OnBorderCommand)
// //}}AFX_MSG_MAP
// END_MESSAGE_MAP()
//
// BOOL CMainFrame::OnBorderCommand(UINT nID)
// {
// // TODO: Add your command handler code here
// switch (nID)
// {
// case ID_BDR_OUTSIDE:
// break;
// case ID_BDR_ALL:
// break;
// case ID_BDR_TOP:
// break;
// case ID_BDR_LEFT:
// break;
// }
//
// return TRUE;
// }
//
// See the FontCombo sample application for an example use of this class.
virtual BOOL Create(CXTToolBar* pParent,UINT uToolbarID,int iNumCols=5);
// Input: uCmdID - Command ID of the toolbar button to set active.
// Summary: This member function is called to update the currently selected icon
// for the parent toolbar. This icon will represent the selection the
// user made when the popup was open.
virtual void UpdateToolbarIcon(UINT uCmdID);
// Input: uCmdID - Command ID of the toolbar button.
// Returns: A CXTIconHandle object that is used to update the parent toolbar's image list.
// Summary: This member function retrieves the currently selected icon.
virtual CXTIconHandle GetSelectedIcon(UINT uCmdID);
// Ignore:
//{{AFX_VIRTUAL(CXTToolBarPopupWnd)
protected:
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
protected:
// Ignore:
//{{AFX_MSG(CXTToolBarPopupWnd)
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
afx_msg void OnNcPaint();
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
friend class CXTToolBarPopupWndHook;
};
//////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(__POPUPWND_H__)