2025-11-27 16:46:48 +09:00

317 lines
11 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ===================================================================================
// 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 Windows95 CToolBarCtrl placed on
// a COXSizeControlBar. Due to restrictions in the underlying common control it
// is not (and dont 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 Windows95
// 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 ids 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 IDs that correspond to
// the images in the bitmap, and SetButtons() to determine the command IDs
// 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 (Windows95 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__