cdxCSizingDialog.h
上传用户:cbxyz2008
上传日期:2007-01-02
资源大小:45k
文件大小:7k
源码类别:

Static控件

开发平台:

Visual C++

  1. #if !defined(AFX_CDXCSIZINGDIALOG_H__1D0F68C2_BF90_11D1_A589_444553540000__INCLUDED_)
  2. #define AFX_CDXCSIZINGDIALOG_H__1D0F68C2_BF90_11D1_A589_444553540000__INCLUDED_
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. //
  7. // cdxCSizingDialog.h : header file
  8. // -----------------------------------------------------------------------
  9. // Author:  Hans B黨ler (hans.buehler@student.hu-berlin.de)
  10. //          codex design (http://www-pool.mathematik.hu-berlin.de/~codex
  11. // Version: 1.4
  12. // Release: 3 (Jan 1999 to www.codeguru.com)
  13. // -----------------------------------------------------------------------
  14. // Notes to changes for release 2 (V1.3):
  15. // - Now uses cdxCDynamicControlsManager which was
  16. // cdxCSizingDialog::ControlInfo::Header before and had been extended
  17. // to handle all kinds of windows with controls.
  18. // - Since being derived from both CDialog and cdxCDynamicControlsManager
  19. // it now allows to set custom minimum and maximum sizes :)
  20. // - ReorganizeControls() always returns true now.
  21. // - StretchWindow() can now smallen the window, too.
  22. // Returns an error if the window would be too small.
  23. // - You can now easily make several controls act equally (they remain at
  24. // the same position and size).
  25. // To implement this, add the first control using AddSzControlEx() or any
  26. // of its short-cuts, get the returned cdxCDynamicControlsManager::ControlPosition
  27. // object and use its Add() member function to add the other controls.
  28. // - cdxCSizingDialog is now DECLAREed_DYNAMIC.
  29. // - RestoreWindowPosition() now allows to restore the visible state
  30. // what was infuctional before.
  31. // Note that the calling convention changed !!!!
  32. // Changes to Rel.3 (V1.4):
  33. // - Destructor no longer calls a virtual function.
  34. // -----------------------------------------------------------------------
  35. // Comments welcome.
  36. //
  37. //
  38. #include "cdxCDynamicControlsManager.h"
  39. /*
  40.  * cdxCSizingDialog[CDialog,cdxCDynamicControlsManager]
  41.  * ====================================================
  42.  * A CDialog dervied class that implements a sizable dialog class.
  43.  *
  44.  * The class is derived from cdxCDynamicControlsManager, therefore it
  45.  * mainly calls the functions of this class.
  46.  * Note the members of cdxCDynamicControlsManager, especially
  47.  * AddSzControlEx() and its short-cuts.
  48.  HOW TO USE:
  49. - Using the resource edit, design your dialog in its minimum size (recommended).
  50. - Create a dialog class for it.
  51. Create OnInitDialog().
  52. - Open the header file, add an #include "cdxCSizingDialog.h" and replace all
  53. "CDialog"s by "cdxCSizingDialog".
  54. - Open the implementation file, and replace all
  55. "CDialog"s by "cdxCSizingDialog".
  56. - Open the constructor of your class where it calls the constructor
  57. of cdxCSizingDialog and set the Freedom and bMkIcon parameters
  58. to your preferred values.
  59. - Open OnInitDialog().
  60. - Ensure that you first call cdxCSizingDialog::OnInitDialog().
  61. Note that by default the dialog will be opened with 110% of its initial
  62. size. To change this, pass value different from 10 to OnInitDialog.
  63. Use 0 if you don't want the dialog to be resized.
  64. - For each control that should change its pos/size when the window size
  65. changes, you need a "Control"-member variable (use the classwizard).
  66. Use AddSzControl(control_member,...) to make you controls being
  67. dynamically sizable.
  68. See cdxCDynamicControlsManager::AddSzControl() for further information.
  69.  NOTES:
  70.   - If you overwrize OnSize() or OnGetMinMaxInfo(), don't forget to call the
  71. base-class functions.
  72.  FURTHER UTILITIES:
  73.  - PumpMessages() empties the windows message queue.
  74.    Use it in lengthy operations to ensure the window will react
  75. on user size changes.
  76.  - Use StoreWindowPosition() and RestoreWindowPosition() to save and
  77.    load your window's size and position from the registry.
  78.  - Use cdxCDynamicControlsManager::SetMinMaxSizes() to set the minimum and
  79. maximum sizes of the dialog.
  80.  *
  81.  * (w)Mar.1998 Hans B黨ler, codex design (release 1)
  82.  * (w)Oct.1998 Hans B黨ler, codex design (release 2)
  83.  *    hans.buehler@student.hu-berlin.de;
  84.  *    posted to www.codeguru.com
  85.  *    This is freeware; you use this on your own risk.
  86.  */
  87. class cdxCSizingDialog : public CDialog, public cdxCDynamicControlsManager
  88. {
  89. DECLARE_DYNAMIC(cdxCSizingDialog);
  90. protected:
  91. enum // kept here for compatibility
  92. {
  93. DEF_STRETCH = 10,
  94. exIgnore = 0,
  95. exMaximum = 100
  96. };
  97. //
  98. // members
  99. //
  100. private:
  101. Freedom m_InitFreedom; // these are needed for compatibility to older
  102. bool m_bMkIcon; // versions of cdxCSizingDialog
  103. protected:
  104. cdxCSizingDialog(UINT idd, CWnd* pParent = NULL, Freedom fd = fdAll, bool bSizeIcon = true) : CDialog(idd, pParent), m_InitFreedom(fd), m_bMkIcon(bSizeIcon) { ASSERT(idd != 0); }
  105. public:
  106. virtual ~cdxCSizingDialog() { cdxCSizingDialog::DestroyWindow(); }
  107. //
  108. // reapply window size - ALWAYS returns true now
  109. //
  110. public:
  111. bool ReorganizeControls(void) { cdxCDynamicControlsManager::ReorganizeControls(); return true; }
  112. //
  113. // process all messages of the dialog
  114. //
  115. protected:
  116. void PumpMessages(void);
  117. bool RestoreWindowPosition(LPCTSTR lpszProfile, UINT restoreFlags = rflg_none) { return cdxCDynamicControlsManager::RestoreWindowPosition(lpszProfile,restoreFlags); }
  118. bool StoreWindowPosition(LPCTSTR lpszProfile) { return cdxCDynamicControlsManager::StoreWindowPosition(lpszProfile); }
  119. //
  120. // dialog stuff
  121. //
  122. protected:
  123. BOOL OnInitDialog(UINT iAddSzPercent, Freedom fd, bool bMkIcon);
  124. virtual BOOL OnInitDialog() { return OnInitDialog(10,m_InitFreedom,m_bMkIcon); }
  125. virtual BOOL DestroyWindow(void) { cdxCDynamicControlsManager::DoDestroyWindow(); return CDialog::DestroyWindow(); }
  126. afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
  127. afx_msg void OnSize(UINT nType, int cx, int cy);
  128. DECLARE_MESSAGE_MAP()
  129. //
  130. // obsolete - kept for being compatible
  131. //
  132. protected:
  133. BOOL OnInitDialog(UINT iAddSzPercent) { return OnInitDialog(iAddSzPercent,m_InitFreedom,m_bMkIcon); }
  134. public:
  135. bool RestoreWindowPosition(LPCTSTR lpszProfile, bool bWithState) { return cdxCDynamicControlsManager::RestoreWindowPosition(lpszProfile,bWithState ? rflg_visibility : rflg_none); }
  136. bool RestoreWindowPosition(UINT idsProfile, bool bWithState = false) { CString s;s.LoadString(idsProfile); return cdxCDynamicControlsManager::RestoreWindowPosition(s,bWithState ? rflg_visibility : rflg_none); }
  137. bool StoreWindowPosition(UINT idsProfile) { CString s;s.LoadString(idsProfile); return cdxCDynamicControlsManager::StoreWindowPosition(s); }
  138. };
  139. #endif // !defined(AFX_CDXCSIZINGDIALOG_H__1D0F68C2_BF90_11D1_A589_444553540000__INCLUDED_)