MyCoordDlgBar.cpp
上传用户:cding2008
上传日期:2007-01-03
资源大小:1812k
文件大小:6k
- /////////////////////////////////////////////////////////////////////
- // MyCoordDlgBar.cpp : implementation of the CMyCoordDlgBar floating
- // toolbar class
- //
- // ModelMagic 3D and 'glOOP' (OpenGL Object Oriented Programming library)
- // Copyright (c) Craig Fahrnbach 1997, 1999
- //
- // OpenGL is a registered trademark of Silicon Graphics
- //
- //
- // This program is provided for educational and personal use only and
- // is provided without guarantee or warrantee expressed or implied.
- //
- // Commercial use is strickly prohibited without written permission
- // from ImageWare Development.
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "ModelMagic3D.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- ////////////////////////////////////////////////////////////////////
- // CMyCoordDlgBar globals
-
- ////////////////////////////////////////////////////////////////////
- // CMyCoordDlgBar Construction/Destruction
-
- CMyCoordDlgBar::CMyCoordDlgBar()
- {
- }
-
- CMyCoordDlgBar::~CMyCoordDlgBar()
- {
- }
-
- BOOL CMyCoordDlgBar::Create( CWnd* pParentWnd,
- UINT nIDTemplate,
- UINT nStyle,
- UINT nID, BOOL bChange)
- {
- if(!CDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID))
- return FALSE;
-
- m_bChangeDockedSize = bChange;
- m_sizeFloating = m_sizeDocked = m_sizeDefault;
- return TRUE;
- }
-
- BOOL CMyCoordDlgBar::Create( CWnd* pParentWnd,
- LPCTSTR lpszTemplateName,
- UINT nStyle,
- UINT nID, BOOL bChange)
- {
- if (!CDialogBar::Create( pParentWnd, lpszTemplateName, nStyle, nID))
- return FALSE;
-
- m_bChangeDockedSize = bChange;
- m_sizeFloating = m_sizeDocked = m_sizeDefault;
- return TRUE;
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Overloaded functions
-
- CSize CMyCoordDlgBar::CalcDynamicLayout(int nLength, DWORD nMode)
- {
- // Return default if it is being docked or floated
- if ((nMode & LM_VERTDOCK) || (nMode & LM_HORZDOCK))
- {
- if (nMode & LM_STRETCH) // if not docked stretch to fit
- return CSize((nMode & LM_HORZ) ? 32767 : m_sizeDocked.cx,
- (nMode & LM_HORZ) ? m_sizeDocked.cy : 32767);
- else
- return m_sizeDocked;
- }
- if (nMode & LM_MRUWIDTH)
- return m_sizeFloating;
- // In all other cases, accept the dynamic length
- if (nMode & LM_LENGTHY)
- return CSize(m_sizeFloating.cx, (m_bChangeDockedSize) ?
- m_sizeFloating.cy = m_sizeDocked.cy = nLength :
- m_sizeFloating.cy = nLength);
- else
- return CSize((m_bChangeDockedSize) ?
- m_sizeFloating.cx = m_sizeDocked.cx = nLength :
- m_sizeFloating.cx = nLength, m_sizeFloating.cy);
- }
- BEGIN_MESSAGE_MAP(CMyCoordDlgBar, CDialogBar)
- //{{AFX_MSG_MAP(CMyCoordDlgBar)
- ON_WM_CREATE()
- ON_WM_DESTROY()
- //}}AFX_MSG_MAP
- // USER defined messages
- ON_MESSAGE( WM_CHANGECOORDINATEPAGE, OnChangeCoordPage)
- ON_MESSAGE( WM_UPDATECOORDINATEPAGE, OnUpdateCoordPage)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////
- // CMyCoordDlgBar function implemention
- void CMyCoordDlgBar::UpdateDialogData()
- {
- // Display the modified object/point date only if visible
- if(IsWindowVisible())
- {
- // The user is modifying Object/Point data. Update all pages
- // that have been initialized
- if(m_CoordPropSheet.m_CoordPagePosition.m_hWnd)
- m_CoordPropSheet.m_CoordPagePosition.UpdateDialogData();
- if(m_CoordPropSheet.m_CoordPageRotation.m_hWnd)
- m_CoordPropSheet.m_CoordPageRotation.UpdateDialogData();
- if(m_CoordPropSheet.m_CoordPageScale.m_hWnd)
- m_CoordPropSheet.m_CoordPageScale.UpdateDialogData();
- if(m_CoordPropSheet.m_CoordPageTranslate.m_hWnd)
- m_CoordPropSheet.m_CoordPageTranslate.UpdateDialogData();
- }
- }
- long CMyCoordDlgBar::OnChangeCoordPage(WPARAM wParam, LPARAM lParam)
- {
- // The user has selected an action from the toolbar. Change the
- // CPropertySheet page.
- if(wParam == CP_ORIGIN)
- {
- m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPagePosition);
- m_CoordPropSheet.m_CoordPagePosition.UpdateDialogData();
- }
- if(wParam == CP_ROTATE)
- {
- m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageRotation);
- m_CoordPropSheet.m_CoordPageRotation.UpdateDialogData();
- }
- if(wParam == CP_SCALE)
- {
- m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageScale);
- m_CoordPropSheet.m_CoordPageScale.UpdateDialogData();
- }
- if(wParam == CP_TRANSLATE)
- {
- m_CoordPropSheet.SetActivePage(&m_CoordPropSheet.m_CoordPageTranslate);
- m_CoordPropSheet.m_CoordPageTranslate.UpdateDialogData();
- }
- return 0L;
- }
- long CMyCoordDlgBar::OnUpdateCoordPage(WPARAM wParam, LPARAM lParam)
- {
- // Update the dialog data
- UpdateDialogData();
- return 0L;
- }
- /////////////////////////////////////////////////////////////////////
- // CMyCoordDlgBar message handlers
- int CMyCoordDlgBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CDialogBar::OnCreate(lpCreateStruct) == -1)
- return -1;
- // Get the last setting of the window position from
- // the ini file and restore
- WINDOWPLACEMENT wp;
- if (ReadWindowPlacement(&wp, "Settings", "CoordDlgWndPos"))
- SetWindowPlacement(&wp);
- // Initially hide the Dialog bar until all windows have been
- // positioned (see CMyCoordPropSheet::OnInitDialog() )
- ShowWindow(SW_HIDE);
- // Create the CPropertySheet
- if(!m_CoordPropSheet.Create(this,
- WS_CHILD | WS_VISIBLE,
- WS_EX_TOOLWINDOW ))
- return -1;
- return 0;
- }
- void CMyCoordDlgBar::OnDestroy()
- {
- CDialogBar::OnDestroy();
- // Save the state of our CDialogBar derived class window
- WINDOWPLACEMENT wp;
- wp.length = sizeof wp;
- if (GetWindowPlacement(&wp))
- {
- wp.flags = 0;
- if (IsZoomed())
- wp.flags |= WPF_RESTORETOMAXIMIZED;
- // and write it to the .INI file
- WriteWindowPlacement(&wp, "Settings", "CoordDlgWndPos");
- }
- }