MyCoordDlgBar.cpp
上传用户:cding2008
上传日期:2007-01-03
资源大小:1812k
文件大小:6k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////
  2. // MyCoordDlgBar.cpp : implementation of the CMyCoordDlgBar floating 
  3. //   toolbar class
  4. //
  5. // ModelMagic 3D and 'glOOP' (OpenGL Object Oriented Programming library)
  6. // Copyright (c) Craig Fahrnbach 1997, 1999
  7. //
  8. // OpenGL is a registered trademark of Silicon Graphics
  9. //
  10. //
  11. // This program is provided for educational and personal use only and
  12. // is provided without guarantee or warrantee expressed or implied.
  13. //
  14. // Commercial use is strickly prohibited without written permission
  15. // from ImageWare Development.
  16. //
  17. /////////////////////////////////////////////////////////////////////////////
  18. #include "stdafx.h"
  19. #include "ModelMagic3D.h"
  20. #ifdef _DEBUG
  21. #define new DEBUG_NEW
  22. #undef THIS_FILE
  23. static char THIS_FILE[] = __FILE__;
  24. #endif
  25. ////////////////////////////////////////////////////////////////////
  26. // CMyCoordDlgBar globals
  27.  
  28. ////////////////////////////////////////////////////////////////////
  29. // CMyCoordDlgBar Construction/Destruction
  30.  
  31. CMyCoordDlgBar::CMyCoordDlgBar()
  32. {
  33. }
  34.  
  35. CMyCoordDlgBar::~CMyCoordDlgBar()
  36. {
  37. }
  38.  
  39. BOOL CMyCoordDlgBar::Create( CWnd* pParentWnd,
  40.  UINT nIDTemplate,
  41.  UINT nStyle,
  42.  UINT nID, BOOL bChange)
  43. {
  44. if(!CDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID))
  45. return FALSE;
  46.  
  47. m_bChangeDockedSize = bChange;
  48. m_sizeFloating = m_sizeDocked = m_sizeDefault;
  49. return TRUE;
  50. }
  51.  
  52. BOOL CMyCoordDlgBar::Create( CWnd* pParentWnd,
  53.  LPCTSTR lpszTemplateName,
  54.  UINT nStyle,
  55.  UINT nID, BOOL bChange)
  56. {
  57. if (!CDialogBar::Create( pParentWnd, lpszTemplateName, nStyle, nID))
  58. return FALSE;
  59.  
  60. m_bChangeDockedSize = bChange;
  61. m_sizeFloating = m_sizeDocked = m_sizeDefault;
  62. return TRUE;
  63. }
  64.  
  65.  
  66. ////////////////////////////////////////////////////////////////////
  67. // Overloaded functions
  68.  
  69. CSize CMyCoordDlgBar::CalcDynamicLayout(int nLength, DWORD nMode)
  70. {
  71.     // Return default if it is being docked or floated
  72.     if ((nMode & LM_VERTDOCK) || (nMode & LM_HORZDOCK))
  73.     {
  74.         if (nMode & LM_STRETCH) // if not docked stretch to fit
  75.             return CSize((nMode & LM_HORZ) ? 32767 : m_sizeDocked.cx,
  76.                          (nMode & LM_HORZ) ? m_sizeDocked.cy : 32767);
  77.           else
  78.             return m_sizeDocked;
  79.     }
  80.     if (nMode & LM_MRUWIDTH)
  81.         return m_sizeFloating;
  82.     // In all other cases, accept the dynamic length
  83.     if (nMode & LM_LENGTHY)
  84.         return CSize(m_sizeFloating.cx, (m_bChangeDockedSize) ?
  85.                      m_sizeFloating.cy = m_sizeDocked.cy = nLength :
  86.                      m_sizeFloating.cy = nLength);
  87.      else
  88.         return CSize((m_bChangeDockedSize) ?
  89.                      m_sizeFloating.cx = m_sizeDocked.cx = nLength :
  90.                      m_sizeFloating.cx = nLength, m_sizeFloating.cy);
  91. }
  92. BEGIN_MESSAGE_MAP(CMyCoordDlgBar, CDialogBar)
  93.     //{{AFX_MSG_MAP(CMyCoordDlgBar)
  94. ON_WM_CREATE()
  95. ON_WM_DESTROY()
  96. //}}AFX_MSG_MAP
  97. // USER defined messages
  98. ON_MESSAGE( WM_CHANGECOORDINATEPAGE, OnChangeCoordPage)
  99. ON_MESSAGE( WM_UPDATECOORDINATEPAGE, OnUpdateCoordPage)
  100. END_MESSAGE_MAP()
  101. /////////////////////////////////////////////////////////////////////
  102. // CMyCoordDlgBar function implemention
  103. void CMyCoordDlgBar::UpdateDialogData()
  104. {
  105. // Display the modified object/point date only if visible
  106. if(IsWindowVisible())
  107. {
  108. // The user is modifying Object/Point data.  Update all pages
  109. // that have been initialized
  110. if(m_CoordPropSheet.m_CoordPagePosition.m_hWnd)
  111. m_CoordPropSheet.m_CoordPagePosition.UpdateDialogData();
  112. if(m_CoordPropSheet.m_CoordPageRotation.m_hWnd)
  113. m_CoordPropSheet.m_CoordPageRotation.UpdateDialogData();
  114. if(m_CoordPropSheet.m_CoordPageScale.m_hWnd)
  115. m_CoordPropSheet.m_CoordPageScale.UpdateDialogData();
  116. if(m_CoordPropSheet.m_CoordPageTranslate.m_hWnd)
  117. m_CoordPropSheet.m_CoordPageTranslate.UpdateDialogData();
  118. }
  119. }
  120. long CMyCoordDlgBar::OnChangeCoordPage(WPARAM wParam, LPARAM lParam)
  121. {
  122. // The user has selected an action from the toolbar.  Change the 
  123. // CPropertySheet page.
  124. if(wParam == CP_ORIGIN)
  125. {
  126. m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPagePosition);
  127. m_CoordPropSheet.m_CoordPagePosition.UpdateDialogData();
  128. }
  129. if(wParam == CP_ROTATE)
  130. {
  131. m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageRotation);
  132. m_CoordPropSheet.m_CoordPageRotation.UpdateDialogData();
  133. }
  134. if(wParam == CP_SCALE)
  135. {
  136. m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageScale);
  137. m_CoordPropSheet.m_CoordPageScale.UpdateDialogData();
  138. }
  139. if(wParam == CP_TRANSLATE)
  140. {
  141. m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageTranslate);
  142. m_CoordPropSheet.m_CoordPageTranslate.UpdateDialogData();
  143. }
  144. return 0L;
  145. }
  146. long CMyCoordDlgBar::OnUpdateCoordPage(WPARAM wParam, LPARAM lParam)
  147. {
  148. // Update the dialog data
  149. UpdateDialogData();
  150. return 0L;
  151. }
  152. /////////////////////////////////////////////////////////////////////
  153. // CMyCoordDlgBar message handlers
  154. int CMyCoordDlgBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  155. {
  156. if (CDialogBar::OnCreate(lpCreateStruct) == -1)
  157. return -1;
  158. // Get the last setting of the window position from
  159. // the ini file and restore
  160. WINDOWPLACEMENT wp;
  161. if (ReadWindowPlacement(&wp, "Settings", "CoordDlgWndPos"))
  162. SetWindowPlacement(&wp);
  163. // Initially hide the Dialog bar until all windows have been
  164. // positioned (see CMyCoordPropSheet::OnInitDialog() )
  165. ShowWindow(SW_HIDE);
  166. // Create the CPropertySheet
  167. if(!m_CoordPropSheet.Create(this,
  168. WS_CHILD | WS_VISIBLE,
  169. WS_EX_TOOLWINDOW ))
  170. return -1;
  171. return 0;
  172. }
  173. void CMyCoordDlgBar::OnDestroy() 
  174. {
  175. CDialogBar::OnDestroy();
  176. // Save the state of our CDialogBar derived class window
  177. WINDOWPLACEMENT wp;
  178. wp.length = sizeof wp;
  179. if (GetWindowPlacement(&wp))
  180. {
  181. wp.flags = 0;
  182. if (IsZoomed())
  183. wp.flags |= WPF_RESTORETOMAXIMIZED;
  184. // and write it to the .INI file
  185. WriteWindowPlacement(&wp, "Settings", "CoordDlgWndPos");
  186. }
  187. }