// ========================================================================== // Class Specification : COXMulticlipboardDlg // ========================================================================== // 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. // ////////////////////////////////////////////////////////////////////////// // Desciption : // // This is (surprise!) CDialog derived class that implements "spy" // on a Windows clipboard. Data will be added automatically once you have // make copy or paste in any window that appeares in the dialog as new pocket (button). // The pocket will have appropriate icon and can provide customizable tips. // To copy data from the pocket to the clipboard just press button. // // To use in application you can save last active window and make paste to the window // if you override PocketToClip function that is called when a user presses the // pocket. Alternative, you can call this function without pressing the pocket // to put data to the clipboard. // // The 2 function that actually get and set the // data are virtual. You can override it if you want to handle the data // in some specific format since clipboard can return the data in different formats usually. // The first format is most convinient format. // By default this class does not save the clipboard data in custom formats // because of different storage types. If you want to save the data // in registered clipboard format you have to define OX_CLIP_DO_CUSTOM_FORMATS // macro. The data in custom registered format may come with different types of the // storage like not only HGLOBAL or HBITMAP that can be copied and stored safely // but also like pointer to IStorage object. There is no warranty that if we // save this pointer that next time this pointer actually be valid, but the data // can be changed already. So, it is up to you to decide will you work with this formats // or wont. // // Usually we do not have to do anything additional to use this class. // Just insert the class in your project and it is ready to use. // The class provides many helper functions to customize drawing, like adjusting // different offsets, customizables icons and their sizes. // // Dependencies: // // "OXMulticlipboardDlg.h" // // "OXMulticlipboardDlg.rc" // // "OXMulticlipboardDlg.cpp" // "OXClipPocket.cpp" // "OXToolTipCtrl.cpp" // // Sample: "..\Ultimate Toolbox\Samples\Utility\ClipDock\" // ///////////////////////////////////////////////////////////////////////////// #if !defined(_MULTICLIPBOARDDLG_H__) #define _MULTICLIPBOARDDLG_H__ #include "OXToolTipCtrl.h" #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "OXdllext.h" #include "OXClipPocket.h" #include "OXToolTipCtrl.h" #include "OXMainRes.h" #include "UTB64Bit.h" //////////////////////////////////////////////////////////////////////////// //definitions #define OX_CLIP_ICON_WIDTH 32 #define OX_CLIP_ICON_SPACE 4 #define OX_CLIP_EDGE_OFFSET 4 #define OX_CLIP_STATIC_DIMENSION 10 #define OX_CLIP_MAX_POCKETS 8 #define OX_CLIP_POCKETS_IN_ROW 4 #define OX_CLIP_FIRST_ID 0x1000 ///////////////////////////////////////////////////////////////////////////// // CMulticlipboardDlg dialog class OX_CLASS_DECL COXMulticlipboardDlg : public CDialog { DECLARE_DYNCREATE(COXMulticlipboardDlg) friend COXClipPocket; public: // --- In : // --- Out : // --- Returns: // --- Effect: Standard constructor COXMulticlipboardDlg(CWnd* pParent = NULL); // --- In : pPocket - pointer to the COXClipPocket object // --- Out : // --- Returns: // --- Effect: Copies contents of the pocket to the clipboard virtual void PocketToClip(COXClipPocket* pPocket); // --- In : pPocket - pointer to the COXClipPocket object // --- Out : // --- Returns: // --- Effect: Copies contents of the clipboard to the pocket virtual void ClipToPocket(COXClipPocket* pPocket); // --- In : nPocket - number of the pocket to remove // --- Out : // --- Returns: // --- Effect: Removes specified pocket. void RemovePocket(int nPocket); // --- In : nPocket - number of the pocket to empty // --- Out : // --- Returns: // --- Effect: Empties contents of the pocket. Does not destroy the pocket. void EmptyPocket(int nPocket); // --- In : pPocket - pointer to the COXClipPocket object // --- Out : // --- Returns: // --- Effect: Empties contents of the pocket. Does not destroy the pocket. void EmptyPocket(COXClipPocket* pPocket); // --- In : nDimension - offset of the static control from the border // --- Out : // --- Returns: // --- Effect: Affects appearence. Set new offset for static control. inline void SetStaticDimension(UINT nDimension) {m_nStaticDimension=nDimension;} // --- In : // --- Out : // --- Returns: Offset of the static control from the border // --- Effect: Call this function to get static control offset inline UINT GetStaticDimension() const {return m_nStaticDimension;} // --- In : nOffset - width of the buttons' borders (COXClipPocket) // --- Out : // --- Returns: // --- Effect: Sets new width of the buttons' border. Affects appearence inline void SetEdgeOffset(UINT nOffset) {m_nEdgeOffset=nOffset;} // --- In : // --- Out : // --- Returns: width of the buttons' borders (COXClipPocket) // --- Effect: Gets width of the buttons' border. inline UINT GetEdgeOffset() const {return m_nEdgeOffset;} // --- In : nWidth - new width of the icons be calculated // --- Out : // --- Returns: // --- Effect: Sets new icon width inline void SetIconWidth(UINT nWidth) {m_nIconWidth=nWidth;} // --- In : nHeight - new icon height be calculated // --- Out : // --- Returns: // --- Effect: Sets new icon height inline void SetIconHeight(UINT nHeight) {m_nIconHeight=nHeight;} // --- In : // --- Out : // --- Returns: icon width // --- Effect: Gets icon width inline UINT GetIconWidth() const {return m_nIconWidth;} // --- In : // --- Out : // --- Returns: icon height // --- Effect: Gets icon height inline UINT GetIconHeight() const {return m_nIconHeight;} // --- In : // --- Out : // --- Returns: space (in pixels) between pockets // --- Effect: Returns space between icons inline UINT GetIconSpace() const {return m_nIconSpace;} // --- In : nSpace - new space between icons // --- Out : // --- Returns: // --- Effect: Sets new space between icons inline void SetIconSpace(UINT nSpace) {m_nIconSpace=nSpace;} // --- In : // --- Out : // --- Returns: number of the pockets per row // --- Effect: Returns number of the pockets per row inline UINT GetPocketsInRow() const {return m_nPocketsInRow;} // --- In : nPockets - number of the pockets // --- Out : // --- Returns: // --- Effect: Sets new number of the pockets per row inline void SetPocketsInRow(UINT nPockets) {m_nPocketsInRow=nPockets;} // --- In : bReplace - TRUE to replace pockets FALSE otherwise // --- Out : // --- Returns: // --- Effect: Turns on/off switching from the last pocket // to the first one if comes data and last pocket // is not empty inline void SetReplacePockets(BOOL bReplace=TRUE) {m_bReplacePockets=bReplace;} // --- In : // --- Out : // --- Returns: TRUE if replacing pockets turned on, FALSE if off // --- Effect: Gets replace pockets parameter inline BOOL GetReplacePockets() const {return m_bReplacePockets;} // --- In : nLast - index of the last pocket // should be in the dialog // --- Out : // --- Returns: number of the pockets actually can be settled on the dialog // --- Effect: This function recalculate all geometrical sizes and actually // moves static control and pockets if nessesary. If CanResize() // returns TRUE this function will resize dialog in order to place // all requested buttons. int AdjustSize(UINT nLast); // --- In : // --- Out : // --- Returns: index of the last pocket in the collection // --- Effect: Gets last pocket index inline int GetLastPocketIndex() const {return PtrToInt(m_pPockets.GetUpperBound());} // --- In : // --- Out : // --- Returns: current pocket // --- Effect: Returns current pocket. This is a last pocket // that has received data from the clipboard. inline int GetCurrentPocket() const {return m_nCurrentPocket;} // --- In : nPocket - number of the pocket in the collection // --- Out : // --- Returns: pointer to the pocket on success, NULL otherwise // --- Effect: Retrieves pointer to the COXClipPocketObject inline COXClipPocket* GetPocket(int nPocket) const { return (m_pPockets.GetSize() && (nPocket