317 lines
11 KiB
C++
317 lines
11 KiB
C++
// ===================================================================================
|
||
// Class Specification :
|
||
// COXToolCmdUI & COXToolBarCtrl & COXSizeToolBar
|
||
// ===================================================================================
|
||
|
||
// Header file : OXSizeToolBar.h
|
||
|
||
// Version: 9.3
|
||
|
||
// This software along with its related components, documentation and files ("The Libraries")
|
||
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
||
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
||
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
||
// to obtain this file, or directly from our office. For a copy of the license governing
|
||
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
||
// Some portions Copyright (C)1994-5 Micro Focus Inc, 2465 East Bayshore Rd, Palo Alto, CA 94303.
|
||
|
||
// //////////////////////////////////////////////////////////////////////////
|
||
|
||
// Properties:
|
||
// NO Abstract class (does not have any objects)
|
||
// YES Derived from CCmdUI / CToolBarCtrl / COXSizeControlBar
|
||
|
||
// NO / YES / YES Is a Cwnd.
|
||
// NO / YES /YES Two stage creation (constructor & Create())
|
||
// NO / YES / YES Has a message map
|
||
// NO / YES / YES Needs a resource (template)
|
||
|
||
// NO Persistent objects (saveable on disk)
|
||
// NO Uses exceptions
|
||
|
||
// //////////////////////////////////////////////////////////////////////////
|
||
|
||
// Desciption :
|
||
//
|
||
// COXToolCmdUI - CCmdUI derived class.
|
||
//
|
||
// COXToolBarCtrl - CToolBarCtrl derived object with addition left mouse button handling, etc.
|
||
//
|
||
// COXSizeToolBar - a sizeable toolbar. A sizeable control bar containing a CToolBarCtrl object.
|
||
// which responds to tooltips/command enabling through the normal MFC architecture
|
||
|
||
// COXSizeToolBar implements a sizeable toolbar that is largely compatible with
|
||
// CToolBar. It responds to the standard MFC ON_UPDATE_CMD_UI handling and
|
||
// routing, tooltips and prompting, and provides the benefits of the common
|
||
// control, such as configuration.
|
||
// This class is actually implemented as a Windows’95 CToolBarCtrl placed on
|
||
// a COXSizeControlBar. Due to restrictions in the underlying common control it
|
||
// is not (and don’t think it ever can be) 100% compatible with the CToolBar
|
||
// class. However, enough compatibility is provided for AppWizard generated
|
||
// apps to work with minimal change (i.e. altering CMainFrame::m_wndToolBar
|
||
// to be a COXSizeToolBar).
|
||
// Some additional functionality has been added to utiltise the Windows’95
|
||
// common control configuration. To use this class, you must include the
|
||
// header file "afxcmn.h".
|
||
// Remark:
|
||
//
|
||
|
||
// Prerequisites (necessary conditions):
|
||
// ***
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
#ifndef __SIZETOOLBAR_H__
|
||
#define __SIZETOOLBAR_H__
|
||
|
||
#if _MSC_VER >= 1000
|
||
#pragma once
|
||
#endif // _MSC_VER >= 1000
|
||
|
||
#include "OXDllExt.h"
|
||
|
||
#include "OXSizeCtrlBar.h"
|
||
|
||
|
||
class OX_CLASS_DECL COXToolCmdUI : public CCmdUI
|
||
{
|
||
// Data members -------------------------------------------------------------
|
||
public:
|
||
|
||
protected:
|
||
|
||
private :
|
||
|
||
// Member functions ---------------------------------------------------------
|
||
public: // re-implementations only
|
||
|
||
virtual void Enable(BOOL bOn);
|
||
// --- In : See CCmdUI::Enable
|
||
// --- Out : See CCmdUI::Enable
|
||
// --- Returns : See CCmdUI::Enable
|
||
// --- Effect : See CCmdUI::Enable
|
||
|
||
virtual void SetCheck(int nCheck);
|
||
// --- In : See CCmdUI::SetCheck
|
||
// --- Out : See CCmdUI::SetCheck
|
||
// --- Returns : See CCmdUI::SetCheck
|
||
// --- Effect : See CCmdUI::SetCheck
|
||
|
||
virtual void SetText(LPCTSTR lpszText);
|
||
// --- In : See CCmdUI::SetText
|
||
// --- Out : See CCmdUI::SetText
|
||
// --- Returns : See CCmdUI::SetText
|
||
// --- Effect : See CCmdUI::SetText
|
||
|
||
protected:
|
||
|
||
private :
|
||
|
||
};
|
||
|
||
class OX_CLASS_DECL COXToolBarCtrl : public CToolBarCtrl
|
||
{
|
||
// Data members -------------------------------------------------------------
|
||
public:
|
||
|
||
protected:
|
||
|
||
private :
|
||
|
||
// Member functions ---------------------------------------------------------
|
||
public:
|
||
COXToolBarCtrl();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Constructor of object
|
||
// It will initialize the internal state
|
||
|
||
void GetBoundingSize(CSize& size);
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect :
|
||
|
||
int HitTestButtons(CPoint point);
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect :
|
||
|
||
virtual ~COXToolBarCtrl();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Destructor of object
|
||
|
||
// Overrides
|
||
// ClassWizard generated virtual function overrides
|
||
//{{AFX_VIRTUAL(COXToolBarCtrl)
|
||
//}}AFX_VIRTUAL
|
||
|
||
protected:
|
||
//{{AFX_MSG(COXToolBarCtrl)
|
||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||
//}}AFX_MSG
|
||
|
||
DECLARE_MESSAGE_MAP()
|
||
|
||
private:
|
||
|
||
};
|
||
|
||
class OX_CLASS_DECL COXSizeToolBar : public COXSizeControlBar
|
||
{
|
||
DECLARE_DYNAMIC(COXSizeToolBar);
|
||
|
||
// Data members -------------------------------------------------------------
|
||
public:
|
||
|
||
COXToolBarCtrl m_ToolCtrl;
|
||
|
||
protected:
|
||
|
||
CSize m_ToolCtrlButtonSize; // size of buttons in CToolBarCtrl - not available
|
||
CBitmap m_Bitmap; // bitmap to be used in control
|
||
|
||
private :
|
||
|
||
UINT* m_pBitmapIds; // ID pallette in the bitmap
|
||
int m_nBitmapButtons; // no of buttons in the toolbar palette
|
||
|
||
// Member functions ---------------------------------------------------------
|
||
public:
|
||
|
||
COXSizeToolBar(int nStyle = 0);
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Constructor of object
|
||
// It will initialize the internal state
|
||
|
||
BOOL Create(CWnd* pParent, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,
|
||
UINT nID = AFX_IDW_TOOLBAR, LPRECT pRect = NULL);
|
||
// --- In : pParent : Parent window
|
||
// dwStyle : Style.
|
||
// nID : ID.
|
||
// pRect : Points to a rectangle for the initial size of the toolbar.
|
||
// If NULL, the a rectangle big enough for 1 row of standard sized
|
||
// toolbar buttons is used.
|
||
// --- Out :
|
||
// --- Returns : succeeded or not
|
||
// --- Effect : Creates the underlying windows objects for the toolbar.
|
||
|
||
BOOL LoadBitmap(LPCTSTR lpszResourceName);
|
||
// --- In : lpszResourceName : Resource string of bitmap to load
|
||
// --- Out :
|
||
// --- Returns : succeeded or not
|
||
// --- Effect : Sets the underlying bitmap to be used for the images on the toolbar
|
||
// buttons
|
||
// Non-Compatibility with CToolBar
|
||
// 1.LoadBitmap() may only be called once for COXSizeToolBar.
|
||
// 2. If you wish to use a toolbar with non-standard sizes, you should call SetSizes() before LoadBitmap().
|
||
// These are underlying restrictions in CToolBarCtrl.
|
||
|
||
|
||
BOOL LoadBitmap(UINT nID)
|
||
{ return LoadBitmap(MAKEINTRESOURCE(nID)); };
|
||
// --- In : nID : Resource ID of bitmap to load
|
||
// --- Out :
|
||
// --- Returns : succeeded or not
|
||
// --- Effect : Sets the underlying bitmap to be used for the images on the toolbar
|
||
// buttons
|
||
// Non-Compatibility with CToolBar
|
||
// 1.LoadBitmap() may only be called once for COXSizeToolBar.
|
||
// 2. If you wish to use a toolbar with non-standard sizes, you should call SetSizes() before LoadBitmap().
|
||
// These are underlying restrictions in CToolBarCtrl.
|
||
|
||
void SetSizes(SIZE sizeButton, SIZE sizeImage);
|
||
// --- In : sizeButton : Sizes of the buttons in the underlying toolbar.
|
||
// sizeImage : Sizes of images in the underlying toolbar
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Sets the sizes of the images in the underlying bitmap, and of the buttons
|
||
// in the toolbar.
|
||
// Non-Compatibility with CToolBar
|
||
// 1. Setsizes() must be called after Create()
|
||
// 2. SetSizes() should be called before LoadBitmap() to have any effect on the image sizes.
|
||
// These are underlying restrictions in CToolBarCtrl.
|
||
|
||
BOOL SetButtons(UINT* pButtons, int nButtons);
|
||
// --- In : pButtons : Points to an array of button command Ids.
|
||
// nButtons : Number of buttons in the above array.
|
||
// --- Out :
|
||
// --- Returns : succeeded or not
|
||
// --- Effect : Sets the command id’s for the buttons in the toolbar. This function
|
||
// is equivalent to CToolBar::SetButtons().
|
||
// Non-Compatibility with CToolBar
|
||
// 1. SetButtons() must be called after Create() and LoadBitmap().
|
||
|
||
|
||
void SetBitmapIds(UINT* pIds, int nButtons);
|
||
// --- In : pIds : Points to an array of button bitmap Ids.
|
||
// nButtons : Number of buttons in the above array.
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : This function enables the CToolBarCtrl configuration features. It specifies
|
||
// an array of command IDs that the images in the bitmap represent. Call this
|
||
// function before Create(), and SetButtons() and the toolbar will be created
|
||
// with the CCS_ADJUSTABLE style. SetButtons() then uses this specified array
|
||
// to determine which bitmap images to use, and the common control customization
|
||
// dialog uses it to determine which buttons could possible be on the toolbar.
|
||
// The idea is that you call SetBitmapIds() to set the ID’s that correspond to
|
||
// the images in the bitmap, and SetButtons() to determine the command ID’s
|
||
// that are actually on the toolbar.
|
||
//
|
||
// The common control customization allows buttons you to drag buttons,
|
||
// by holding the shift button and clicking and dragging the button, either to
|
||
// a new position on the toolbar, or off it (to remove it from the toolbar).
|
||
// Double-clicking displays the configuration dialog.
|
||
|
||
CToolBarCtrl* GetToolBarCtrl();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : the underlying CToolBarCtrl object
|
||
// --- Effect : Returns a pointer to the underlying CToolBarCtrl object (Windows’95 common
|
||
// control). You should manipulate this object explicitly to obtain more
|
||
// refined toolbar behaviour - e.g. setting buttons, etc.
|
||
|
||
virtual ~COXSizeToolBar();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Destructor of object
|
||
|
||
protected:
|
||
|
||
//{{AFX_MSG(COXSizeToolBar)
|
||
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
||
//}}AFX_MSG
|
||
|
||
DECLARE_MESSAGE_MAP()
|
||
|
||
private:
|
||
|
||
int FindBitmapIndex(UINT nID);
|
||
|
||
// Overrides
|
||
// ClassWizard generated virtual function overrides
|
||
//{{AFX_VIRTUAL(COXSizeToolBar)
|
||
protected:
|
||
//}}AFX_VIRTUAL
|
||
afx_msg void OnTBNToolTip(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
afx_msg void OnTBNBeginAdjust(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
afx_msg void OnTBNQueryInsert(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
afx_msg void OnTBNQueryDelete(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
afx_msg void OnTBNToolBarChange(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
afx_msg void OnTBNGetButtonInfo(UINT uID, NMHDR* pNMHDR, LRESULT* pResult);
|
||
|
||
virtual void OnSizedOrDocked(int cx, int cy, BOOL bFloating, int flags);
|
||
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
|
||
|
||
};
|
||
|
||
#endif // __SIZETOOLBAR_H__
|
||
|