PropDlg.cpp
Upload User: jqph2005
Upload Date: 2009-03-31
Package Size: 117k
Code Size: 3k
Category:

OpenGL program

Development Platform:

C/C++

  1. #include "stdafx.h"
  2. #include "OG.h"
  3. #include "OGDoc.h"
  4. #include "PropDlg.h"
  5. #include "OGView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. CPropDlg::CPropDlg(COGView* p) : CDialog(CPropDlg::IDD, p)
  12. {
  13. m_pView = p;
  14. //{{AFX_DATA_INIT(CPropDlg)
  15. //}}AFX_DATA_INIT
  16. }
  17. void CPropDlg::DoDataExchange(CDataExchange* pDX)
  18. {
  19. CDialog::DoDataExchange(pDX);
  20. //{{AFX_DATA_MAP(CPropDlg)
  21. //}}AFX_DATA_MAP
  22. }
  23. BEGIN_MESSAGE_MAP(CPropDlg, CDialog)
  24. //{{AFX_MSG_MAP(CPropDlg)
  25. ON_WM_HSCROLL()
  26. ON_WM_CLOSE()
  27. ON_BN_CLICKED(IDC_FILENAME, OnFilename)
  28. //}}AFX_MSG_MAP
  29. END_MESSAGE_MAP()
  30. void CPropDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  31. {
  32. HWND hwnd = pScrollBar->GetSafeHwnd();
  33. UINT nID;
  34. int num = GetSliderNum(hwnd, nID); // Slider number
  35. int delta, newPos;
  36. switch (nSBCode)
  37. {
  38. case SB_THUMBTRACK:
  39. case SB_THUMBPOSITION: m_Pos[num] = nPos; break;
  40. case SB_LEFT: delta = -100; goto New_Pos;
  41. case SB_RIGHT: delta = +100; goto New_Pos;
  42. case SB_LINELEFT: delta = -1; goto New_Pos;
  43. case SB_LINERIGHT: delta = +1; goto New_Pos;
  44. case SB_PAGELEFT: delta = -20; goto New_Pos;
  45. case SB_PAGERIGHT: delta = +20; goto New_Pos;
  46. New_Pos:
  47. newPos = m_Pos[num] + delta;
  48. m_Pos[num] = newPos<0 ? 0 : newPos>100 ? 100 : newPos;
  49. break;
  50. case SB_ENDSCROLL:
  51. default:
  52. return;
  53. }
  54. char s[8];
  55. sprintf (s,"%d",m_Pos[num]);
  56. SetDlgItemText(nID, (LPCTSTR)s);
  57. m_pView->SetLightParam (num, m_Pos[num]);
  58. }
  59. int CPropDlg::GetSliderNum(HWND hwnd, UINT& nID)
  60. {
  61. switch (::GetDlgCtrlID(hwnd))
  62. {
  63. case IDC_XPOS:
  64. nID = IDC_XPOS_TEXT;
  65. return 0;
  66. case IDC_YPOS:
  67. nID = IDC_YPOS_TEXT;
  68. return 1;
  69. case IDC_ZPOS:
  70. nID = IDC_ZPOS_TEXT;
  71. return 2;
  72. case IDC_AMBIENT:
  73. nID = IDC_AMB_TEXT;
  74. return 3;
  75. case IDC_DIFFUSE:
  76. nID = IDC_DIFFUSE_TEXT;
  77. return 4;
  78. case IDC_SPECULAR:
  79. nID = IDC_SPECULAR_TEXT;
  80. return 5;
  81. case IDC_AMBMAT:
  82. nID = IDC_AMBMAT_TEXT;
  83. return 6;
  84. case IDC_DIFFMAT:
  85. nID = IDC_DIFFMAT_TEXT;
  86. return 7;
  87. case IDC_SPECMAT:
  88. nID = IDC_SPECMAT_TEXT;
  89. return 8;
  90. case IDC_SHINE:
  91. nID = IDC_SHINE_TEXT;
  92. return 9;
  93. case IDC_EMISSION:
  94. nID = IDC_EMISSION_TEXT;
  95. return 10;
  96. }
  97. return 0;
  98. }
  99. BOOL CPropDlg::OnInitDialog() 
  100. {
  101. CDialog::OnInitDialog();
  102. m_pView->GetLightParams(m_Pos);
  103. UINT IDs[] =
  104. {
  105. IDC_XPOS, IDC_YPOS, IDC_ZPOS,
  106. IDC_AMBIENT,IDC_DIFFUSE,IDC_SPECULAR,
  107. IDC_AMBMAT, IDC_DIFFMAT,IDC_SPECMAT,
  108. IDC_SHINE, IDC_EMISSION 
  109. };
  110. for (int i=0; i<sizeof(IDs)/sizeof(IDs[0]); i++)
  111. {
  112. HWND hwnd = GetDlgItem(IDs[i])->GetSafeHwnd();
  113. UINT nID;
  114. int num = GetSliderNum(hwnd, nID);
  115. ::SendMessage(hwnd, TBM_SETPOS, TRUE, (LPARAM)m_Pos[i]);
  116. char s[8];
  117. sprintf (s,"%d",m_Pos[i]);
  118. SetDlgItemText(nID, (LPCTSTR)s);
  119.   }
  120. return TRUE;
  121. }
  122. void CPropDlg::OnFilename() 
  123. {
  124. m_pView->ReadData();
  125. }
  126. void CPropDlg::OnClose() 
  127. {
  128. m_pView->m_pDlg = 0;
  129. CDialog::OnClose();
  130. delete this;
  131. }