3dPageGrid.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:6k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dPageGrid.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #include "3dObjectDialog.h"
  22. #include "MyColorPaletteWnd.h"
  23. #include "EditColorDlg.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char BASED_CODE THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // C3dPageGrid
  30. IMPLEMENT_DYNCREATE(C3dPageGrid, CPropertyPage)
  31. /////////////////////////////////////////////////////////////////////////////
  32. // C3dPageGrid dialog construction
  33. C3dPageGrid::C3dPageGrid()
  34. : CPropertyPage(C3dPageGrid::IDD)
  35. {
  36. m_pColorList = NULL;
  37. //{{AFX_DATA_INIT(C3dPageGrid)
  38. m_fDepth = 0.0f;
  39. m_fWidth = 0.0f;
  40. m_iDivisionsX = 0;
  41. m_iDivisionsY = 0;
  42. m_szName = _T("");
  43. //}}AFX_DATA_INIT
  44. }
  45. /////////////////////////////////////////////////////////////////////////////
  46. // C3dPageGrid Destructor
  47. C3dPageGrid::~C3dPageGrid()
  48. {
  49. }
  50. void C3dPageGrid::DoDataExchange(CDataExchange* pDX)
  51. {
  52. CPropertyPage::DoDataExchange(pDX);
  53. //{{AFX_DATA_MAP(C3dPageGrid)
  54. DDX_Control(pDX, IDC_COLOR_GRID_COMBO, m_ColorCombo);
  55. DDX_Text(pDX, IDC_DEPTH, m_fDepth);
  56. DDX_Text(pDX, IDC_WIDTH, m_fWidth);
  57. DDX_Text(pDX, IDC_DIVISIONS_X, m_iDivisionsX);
  58. DDX_Text(pDX, IDC_DIVISIONS_Y, m_iDivisionsY);
  59. DDX_Text(pDX, IDC_NAME, m_szName);
  60. DDV_MaxChars(pDX, m_szName, 40);
  61. //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(C3dPageGrid, CPropertyPage)
  64. //{{AFX_MSG_MAP(C3dPageGrid)
  65. ON_CBN_SELCHANGE(IDC_COLOR_GRID_COMBO, OnSelchangeColorCombo)
  66. ON_WM_DRAWITEM()
  67. ON_BN_CLICKED(IDC_BUTTON_COLOR_WND, OnButtonColorWnd)
  68. //}}AFX_MSG_MAP
  69. END_MESSAGE_MAP()
  70. /////////////////////////////////////////////////////////////////////////////
  71. // C3dPageGrid Implementation
  72. void C3dPageGrid::PaintButtonWnd(C3dColor* pColor)
  73. {
  74. CRect rect; // window rect
  75. CDC* pDC; // pointer to a device context
  76. if(!pColor)
  77. return; // No color to paint!
  78. // Get the size of the gradient window
  79. m_wndSelColor.GetWindowRect(&rect);
  80. // Get a pointer to the windows device context
  81. pDC = m_wndSelColor.GetDC();
  82. if(pDC && m_pObject)
  83. {
  84. // Since this is an owner drawn button and CPropertyPage
  85. // will not accept extended window attributes, we will
  86. // draw the border for the button, then the selected color.
  87. // Draw the box color
  88. pDC->FillSolidRect(0,
  89.    0,
  90.    rect.right-rect.left,
  91.    rect.bottom-rect.top,
  92.    COLORREF RGB(pColor->m_fColor[0]*255,
  93. pColor->m_fColor[1]*255,
  94. pColor->m_fColor[2]*255));
  95. }
  96. ReleaseDC(pDC);
  97. }
  98. /////////////////////////////////////////////////////////////////////////////
  99. // C3dPageGrid message handlers
  100. BOOL C3dPageGrid::OnInitDialog() 
  101. {
  102. // let the base class do the default work
  103. CPropertyPage::OnInitDialog();
  104. // Set our local values to the Objects' values
  105. m_szName   = m_pObject->m_szName;
  106. m_fWidth   = m_pObject->m_fWidth;
  107. m_fDepth   = m_pObject->m_fDepth;
  108. m_iDivisionsX = m_pObject->m_iDivisionsX;
  109. m_iDivisionsY = m_pObject->m_iDivisionsY;
  110. if(m_pColorList)
  111. // Fill the combo box with all colors in the list
  112. m_pColorList->LoadComboBox(&m_ColorCombo, &m_pObject->m_AltColor);
  113. // Create the owner drawn button color window
  114. CRect rect;
  115. GetDlgItem(IDC_BUTTON_COLOR_WND)->GetWindowRect(&rect);
  116. ScreenToClient(&rect);
  117. // Create the 'Alt Color' window
  118. m_wndSelColor.Create(NULL, // lpszClassName
  119.  NULL, // lpszWindowName
  120.  WS_CHILD | WS_VISIBLE |// dwStyle
  121.  WS_DLGFRAME,
  122.  rect, // rect
  123.  this, // CWnd* pParentWnd
  124.  IDC_BUTTON_COLOR_WND, // UINT  nID
  125.  0); // pContext
  126. // Dialog box is being initialized (FALSE)
  127. // or data is being retrieved (TRUE).
  128. UpdateData(FALSE);
  129. return TRUE;  // return TRUE unless you set the focus to a control
  130.               // EXCEPTION: OCX Property Pages should return FALSE
  131. }
  132. void C3dPageGrid::OnOK() 
  133. {
  134. // Dialog box is being initialized (FALSE)
  135. // or data is being retrieved (TRUE).
  136. UpdateData(TRUE);
  137. // Set our Objects' values to the local values
  138. m_pObject->m_szName = m_szName; 
  139. m_pObject->m_fDepth = m_fDepth;
  140. m_pObject->m_fWidth = m_fWidth;
  141. m_pObject->m_iDivisionsX = m_iDivisionsX;
  142. m_pObject->m_iDivisionsY = m_iDivisionsY;
  143. // Force the object to rebuild its' display list
  144. m_pObject->m_bBuildLists = TRUE;
  145. CPropertyPage::OnOK();
  146. }
  147. void C3dPageGrid::OnSelchangeColorCombo() 
  148. {
  149. C3dColor* pColor;
  150. // Get the zero-based index of the item selected
  151. int index = m_ColorCombo.GetCurSel();
  152. // Cast the user selected list box items' lParam to
  153. // a C3dColor pointer..
  154. pColor = (C3dColor*)m_ColorCombo.GetItemData(index);
  155. if(pColor)
  156. {
  157. // Set the objects color and paint the color
  158. // button window
  159. m_pObject->m_AltColor.SetColor4fv(pColor);
  160. PaintButtonWnd(pColor);
  161. }
  162. }
  163. void C3dPageGrid::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
  164. {
  165. // Call the default handler first
  166. CPropertyPage::OnDrawItem(nIDCtl, lpDrawItemStruct);
  167. if(nIDCtl == IDC_BUTTON_COLOR_WND)
  168. PaintButtonWnd(&m_pObject->m_AltColor);
  169. }
  170. void C3dPageGrid::OnButtonColorWnd() 
  171. {
  172. if(m_pObject) 
  173. {
  174. C3dColor cColor;
  175. cColor.SetColor4fv(&m_pObject->m_AltColor);
  176. // Create the dialog
  177. CEditColorDlg colorDlg(m_pColorList, &cColor, this);
  178. // Invoke the modal dialog box and return the
  179. // dialog-box result when done.
  180. if(colorDlg.DoModal() == IDOK)
  181. {
  182. // Save any changes the user may have made
  183. m_pObject->m_AltColor.SetColor4fv(&colorDlg.m_Color);
  184. PaintButtonWnd(&m_pObject->m_AltColor);
  185. }
  186. }
  187. }