DemoView.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. // DemoView.cpp : implementation of the CDemoView class
  2. //
  3. #include "stdafx.h"
  4. #include "Demo.h"
  5. #include "DemoDoc.h"
  6. #include "DemoView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CDemoView
  14. IMPLEMENT_DYNCREATE(CDemoView, CResizableFormView)
  15. BEGIN_MESSAGE_MAP(CDemoView, CResizableFormView)
  16. //{{AFX_MSG_MAP(CDemoView)
  17. ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  18. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  19. ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
  20. ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
  21. ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CDemoView construction/destruction
  26. CDemoView::CDemoView()
  27. : CResizableFormView(CDemoView::IDD)
  28. {
  29. //{{AFX_DATA_INIT(CDemoView)
  30. // NOTE: the ClassWizard will add member initialization here
  31. //}}AFX_DATA_INIT
  32. }
  33. CDemoView::~CDemoView()
  34. {
  35. }
  36. void CDemoView::DoDataExchange(CDataExchange* pDX)
  37. {
  38. CResizableFormView::DoDataExchange(pDX);
  39. //{{AFX_DATA_MAP(CDemoView)
  40. DDX_Control(pDX, IDC_ICON1, m_icon1);
  41. //}}AFX_DATA_MAP
  42. }
  43. void CDemoView::OnInitialUpdate()
  44. {
  45. // complete initialization
  46. CResizableFormView::OnInitialUpdate();
  47. // use template size as min track size
  48. CRect rect(CPoint(0, 0), GetTotalSize());
  49. CalcWindowRect(rect, CWnd::adjustOutside);
  50. SetMinTrackSize(rect.Size());
  51. CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
  52. // change icon and disable buttons
  53. m_icon1.SetIcon((HICON)::GetClassLong(GetParentFrame()->GetSafeHwnd(), GCL_HICON));
  54. if (GetParentFrame() != GetParent())
  55. {
  56. GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
  57. GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
  58. }
  59. else // only if parent is a frame (not for splitters)!
  60. {
  61. // these two lines are optional
  62. GetParentFrame()->RecalcLayout();
  63. ResizeParentToFit();
  64. }
  65. }
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CDemoView diagnostics
  68. #ifdef _DEBUG
  69. void CDemoView::AssertValid() const
  70. {
  71. CResizableFormView::AssertValid();
  72. }
  73. void CDemoView::Dump(CDumpContext& dc) const
  74. {
  75. CResizableFormView::Dump(dc);
  76. }
  77. CDemoDoc* CDemoView::GetDocument() // non-debug version is inline
  78. {
  79. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDemoDoc)));
  80. return (CDemoDoc*)m_pDocument;
  81. }
  82. #endif //_DEBUG
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CDemoView message handlers
  85. void CDemoView::OnButton2()
  86. {
  87. FormViewToDialog();
  88. UpdateSizeGrip();
  89. }
  90. void CDemoView::OnButton1()
  91. {
  92. DialogToFormView();
  93. UpdateSizeGrip();
  94. }
  95. void CDemoView::FormViewToDialog()
  96. {
  97. CWnd* pParent = GetParent();
  98. // estimate new window's size
  99. CRect rect;
  100. GetTotalClientRect(&rect); // uses GetTotalSize()
  101. DWORD style = pParent->GetStyle() & ~WS_THICKFRAME | WS_DLGFRAME;
  102. ::AdjustWindowRect(&rect, style, ::IsMenu(::GetMenu(pParent->GetSafeHwnd())));
  103. // change style and size
  104. pParent->ModifyStyle(WS_THICKFRAME, WS_DLGFRAME);
  105. pParent->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
  106. SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_FRAMECHANGED);
  107. ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED);
  108. }
  109. void CDemoView::DialogToFormView()
  110. {
  111. CWnd* pParent = GetParent();
  112. // estimate new window's size
  113. CRect rect;
  114. GetTotalClientRect(&rect); // uses GetTotalSize()
  115. DWORD style = pParent->GetStyle() & ~WS_DLGFRAME | WS_THICKFRAME|WS_CAPTION;
  116. ::AdjustWindowRectEx(&rect, style, ::IsMenu(::GetMenu(pParent->GetSafeHwnd())),
  117. WS_EX_CLIENTEDGE);
  118. // change style and size
  119. pParent->ModifyStyle(WS_DLGFRAME, WS_THICKFRAME|WS_CAPTION);
  120. pParent->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
  121. SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_FRAMECHANGED);
  122. ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED);
  123. }
  124. void CDemoView::OnRadio3()
  125. {
  126. // scrollbars won't appear
  127. SetScaleToFitSize(GetTotalSize());
  128. }
  129. void CDemoView::OnRadio2()
  130. {
  131. // allow any size
  132. ResetMinTrackSize();
  133. // reactivate scrollbars
  134. SetScrollSizes(MM_TEXT, GetTotalSize());
  135. }
  136. void CDemoView::OnRadio1()
  137. {
  138. // use template size as min track size
  139. CRect rect(CPoint(0, 0), GetTotalSize());
  140. CalcWindowRect(rect, CWnd::adjustOutside);
  141. SetMinTrackSize(rect.Size());
  142. // reactivate scrollbars
  143. SetScrollSizes(MM_TEXT, GetTotalSize());
  144. }
  145. BOOL CDemoView::OnInitDialog()
  146. {
  147. CResizableFormView::OnInitDialog();
  148. // preset layout
  149. AddAnchor(IDC_STATIC2, TOP_LEFT);
  150. AddAnchor(IDC_EDIT1, TOP_LEFT, ANCHOR(40,100));
  151. AddAnchor(IDC_BUTTON1, BOTTOM_LEFT, ANCHOR(40,100));
  152. AddAnchor(IDC_BUTTON2, BOTTOM_LEFT, ANCHOR(40,100));
  153. AddAnchor(IDC_GROUP1, ANCHOR(40,0), BOTTOM_RIGHT);
  154. AddAnchor(IDC_COMBO1, ANCHOR(40,0), TOP_RIGHT);
  155. AddAnchor(IDC_RADIO1, ANCHOR(70,0), ANCHOR(70,0));
  156. AddAnchor(IDC_RADIO2, ANCHOR(70,0), ANCHOR(70,0));
  157. AddAnchor(IDC_RADIO3, ANCHOR(70,0), ANCHOR(70,0));
  158. AddAnchor(IDC_STATIC1, ANCHOR(40,0), BOTTOM_RIGHT);
  159. AddAnchor(IDC_ICON1, ANCHOR(40,0), ANCHOR(70,0));
  160. return TRUE; // return TRUE unless you set the focus to a control
  161. // EXCEPTION: OCX Property Pages should return FALSE
  162. }