This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / subsys / system / explorer / Seashell / SeaShellExt / Include / UIFixTB.h
diff --git a/subsys/system/explorer/Seashell/SeaShellExt/Include/UIFixTB.h b/subsys/system/explorer/Seashell/SeaShellExt/Include/UIFixTB.h
new file mode 100644 (file)
index 0000000..32f1743
--- /dev/null
@@ -0,0 +1,64 @@
+////////////////////////////////////////////////////////////////
+// Copyright 1998 Paul DiLascia
+// If this code works, it was written by Paul DiLascia.
+// If not, I don't know who wrote it.
+//
+#ifndef __FIXTB_H
+#define __FIXTB_H
+
+//////////////////
+// This class fixes the sizing bugs in MFC that calculates the
+// size of toolbars incorrectly for modern toobars (comctl32 version >= 4.71)
+// It also contains a number of wrappers for function that CToolBar doesn't
+// have (so you don't have to use GetToolBarCtrl).
+//
+// Generally, you should use CFlatToolBar instead of CFixMFCToolBar (even
+// if you're not using the flat style), but you can use CFixMFCToolBar if
+// all you want is the sizing fix for MFC tooblars.
+//
+class CTRL_EXT_CLASS CFixMFCToolBar : public CToolBar {
+public:
+       CFixMFCToolBar();
+       virtual ~CFixMFCToolBar();
+
+       static int iVerComCtl32; // version of commctl32.dll (eg 471)
+
+       // There is a bug in comctl32.dll, version 4.71+ that causes it to
+       // draw vertical separators in addition to horizontal ones, when the
+       // toolbar is vertically docked. If the toolbar has no dropdown buttons,
+       // this is not a problem because the separators are ignored when calculating
+       // the width of the toolbar. If, however, you have dropdown buttons, then the
+       // width of a vertically docked toolbar will be too narrow to show the
+       // dropdown arrow. This is in fact what happens in Visual Studio. If you
+       // want to show the dropdown arrow when vertical, set this to TRUE
+       // (default = FALSE)
+       //
+       BOOL m_bShowDropdownArrowWhenVertical;
+
+       virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
+       virtual CSize CalcDynamicLayout(int nLength, DWORD nMode);
+
+       CSize CalcLayout(DWORD nMode, int nLength = -1);
+       CSize CalcSize(TBBUTTON* pData, int nCount);
+       int WrapToolBar(TBBUTTON* pData, int nCount, int nWidth);
+       void SizeToolBar(TBBUTTON* pData, int nCount, int nLength,
+               BOOL bVert = FALSE);
+       virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
+
+       virtual CSize GetButtonSize(TBBUTTON* pData, int iButton);
+
+       // MFC has versions of these that are protected--but why?
+       //
+       void GetButton(int nIndex, TBBUTTON* pButton) const;
+       void SetButton(int nIndex, TBBUTTON* pButton);
+
+protected:
+       LRESULT OnSizeHelper(CSize& sz, LPARAM lp);
+       afx_msg LRESULT OnSetBitmapSize(WPARAM, LPARAM);
+       afx_msg LRESULT OnSetButtonSize(WPARAM, LPARAM);
+       afx_msg LRESULT OnSettingChange(WPARAM, LPARAM);
+       DECLARE_MESSAGE_MAP()
+       DECLARE_DYNAMIC(CFixMFCToolBar)
+};
+
+#endif