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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dPageColorMatl.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 "MyColorPaletteWnd.h"
  22. #include "EditColorDlg.h"
  23. #include "3dObjectDialog.h"
  24. #include "EditTextureDlg.h"
  25. #ifdef _DEBUG
  26. #undef THIS_FILE
  27. static char BASED_CODE THIS_FILE[] = __FILE__;
  28. #endif
  29. //////////////////////////////////////////////////////////////////
  30. // C3dPageColorMatl
  31. IMPLEMENT_DYNCREATE(C3dPageColorMatl, CPropertyPage)
  32. /////////////////////////////////////////////////////////////////////////////
  33. // C3dPageColorMatl dialog construction
  34. C3dPageColorMatl::C3dPageColorMatl()
  35. : CPropertyPage(C3dPageColorMatl::IDD)
  36. {
  37. m_pColorList = NULL;
  38. m_pMatlList  = NULL;
  39. //{{AFX_DATA_INIT(C3dPageColorMatl)
  40. //}}AFX_DATA_INIT
  41. }
  42. /////////////////////////////////////////////////////////////////////////////
  43. // C3dPageColorMatl Destructor
  44. C3dPageColorMatl::~C3dPageColorMatl()
  45. {
  46. }
  47. void C3dPageColorMatl::DoDataExchange(CDataExchange* pDX)
  48. {
  49. CPropertyPage::DoDataExchange(pDX);
  50. //{{AFX_DATA_MAP(C3dPageColorMatl)
  51. DDX_Control(pDX, IDC_COLOR_COMBO, m_ColorCombo);
  52. DDX_Control(pDX, IDC_MATL_COMBO, m_MatlCombo);
  53. //}}AFX_DATA_MAP
  54. }
  55. BEGIN_MESSAGE_MAP(C3dPageColorMatl, CPropertyPage)
  56. //{{AFX_MSG_MAP(C3dPageColorMatl)
  57. ON_CBN_SELCHANGE(IDC_MATL_COMBO, OnSelchangeMatlCombo)
  58. ON_BN_CLICKED(IDC_BUTTON_COLOR_WND, OnButtonColorWnd)
  59. ON_CBN_SELCHANGE(IDC_COLOR_COMBO, OnSelchangeColorCombo)
  60. ON_WM_DRAWITEM()
  61. //}}AFX_MSG_MAP
  62. END_MESSAGE_MAP()
  63. /////////////////////////////////////////////////////////////////////////////
  64. // C3dPageColorMatl message handlers
  65. BOOL C3dPageColorMatl::OnInitDialog() 
  66. {
  67. // let the base class do the default work
  68. CPropertyPage::OnInitDialog();
  69. // Create the owner drawn button color window
  70. CRect rect;
  71. GetDlgItem(IDC_BUTTON_COLOR_WND)->GetWindowRect(&rect);
  72. ScreenToClient(&rect);
  73. // Create the 'Selected Color' window
  74. m_wndSelColor.Create(NULL, // lpszClassName
  75.  NULL, // lpszWindowName
  76.  WS_CHILD | WS_VISIBLE |// dwStyle
  77.  WS_DLGFRAME,
  78.  rect, // rect
  79.  this, // CWnd* pParentWnd
  80.  IDC_BUTTON_COLOR_WND, // UINT  nID
  81.  0); // pContext
  82. if(m_pColorList)
  83. // Fill the combo box with all colors in the list
  84. m_pColorList->LoadComboBox(&m_ColorCombo, &m_pObject->m_Color);
  85. if(m_pMatlList)
  86. {
  87. // Fill the combo box with all Materials in the list
  88. m_pMatlList->LoadComboBox(&m_MatlCombo);
  89. // if the object has a material attached, display the
  90. // material in the list box of the combo box
  91. if(m_pObject->m_pMaterial)
  92. m_MatlCombo.SelectString(-1, m_pObject->m_pMaterial->m_szName);
  93. }
  94. // Dialog box is being initialized (FALSE)
  95. // or data is being retrieved (TRUE).
  96. UpdateData(FALSE);
  97. return TRUE;  // return TRUE unless you set the focus to a control
  98.               // EXCEPTION: OCX Property Pages should return FALSE
  99. }
  100. void C3dPageColorMatl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
  101. {
  102. // Call the default handler first
  103. CPropertyPage::OnDrawItem(nIDCtl, lpDrawItemStruct);
  104. if(nIDCtl == IDC_BUTTON_COLOR_WND)
  105. PaintButtonWnd();
  106. }
  107. void C3dPageColorMatl::OnSelchangeColorCombo() 
  108. {
  109. C3dColor* pColor;
  110. // Get the zero-based index of the item selected
  111. int index = m_ColorCombo.GetCurSel();
  112. // Cast the user selected list box items' lParam to
  113. // a C3dColor pointer..
  114. pColor = (C3dColor*)m_ColorCombo.GetItemData(index);
  115. if(pColor)
  116. {
  117. // Set the objects color and paint the color
  118. // button window
  119. m_pObject->m_Color.SetColor4fv(pColor);
  120. PaintButtonWnd();
  121. }
  122. }
  123. void C3dPageColorMatl::OnSelchangeMatlCombo() 
  124. {
  125. C3dMaterial* pMatl;
  126. // Get the zero-based index of the item selected
  127. int index = m_MatlCombo.GetCurSel();
  128. // Cast the user selected list box items' lParam to
  129. // a C3dMaterial pointer..
  130. pMatl = (C3dMaterial*)m_MatlCombo.GetItemData(index);
  131. if(pMatl)
  132. {
  133. // Display the materials values
  134. m_pObject->SetMaterial(pMatl);
  135. }
  136. }
  137. void C3dPageColorMatl::OnButtonColorWnd() 
  138. {
  139. if(m_pObject) 
  140. {
  141. C3dColor cColor;
  142. cColor.SetColor4fv(&m_pObject->m_Color);
  143. // Create the dialog
  144. CEditColorDlg colorDlg(m_pColorList, &cColor, this);
  145. // Invoke the modal dialog box and return the
  146. // dialog-box result when done.
  147. if(colorDlg.DoModal() == IDOK)
  148. {
  149. // Save any changes the user may have made
  150. m_pObject->m_Color.SetColor4fv(&colorDlg.m_Color);
  151. PaintButtonWnd();
  152. }
  153. }
  154. }
  155. void C3dPageColorMatl::PaintButtonWnd()
  156. {
  157. CRect rect; // window rect
  158. CDC* pDC; // pointer to a device context
  159. // Get the size of the gradient window
  160. m_wndSelColor.GetWindowRect(&rect);
  161. // Get a pointer to the windows device context
  162. pDC = m_wndSelColor.GetDC();
  163. if(pDC && m_pObject)
  164. {
  165. // Since this is an owner drawn button and CPropertyPage
  166. // will not accept extended window attributes, we will
  167. // draw the border for the button, then the selected color.
  168. // Draw the box color
  169. pDC->FillSolidRect(0,
  170.    0,
  171.    rect.right-rect.left,
  172.    rect.bottom-rect.top,
  173.    COLORREF RGB(m_pObject->m_Color.m_fColor[0]*255,
  174. m_pObject->m_Color.m_fColor[1]*255,
  175. m_pObject->m_Color.m_fColor[2]*255));
  176. }
  177. ReleaseDC(pDC);
  178. }