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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // AnimPageAVI.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 "AnimationDialog.h"
  22. #ifdef _DEBUG
  23. #undef THIS_FILE
  24. static char BASED_CODE THIS_FILE[] = __FILE__;
  25. #endif
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CAnimPageAVI
  28. IMPLEMENT_DYNCREATE(CAnimPageAVI, CPropertyPage)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CAnimPageAVI dialog construction
  31. CAnimPageAVI::CAnimPageAVI()
  32. : CPropertyPage(CAnimPageAVI::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAnimPageAVI)
  35. m_iEnableAudio = 0;
  36. m_iPlayContinuous = -1;
  37. m_szName = _T("");
  38. //}}AFX_DATA_INIT
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CAnimPageAVI Destructor
  42. CAnimPageAVI::~CAnimPageAVI()
  43. {
  44. }
  45. void CAnimPageAVI::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CPropertyPage::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CAnimPageAVI)
  49. DDX_Control(pDX, IDC_SLIDER_VOLUMN, m_SliderVolumn);
  50. DDX_Control(pDX, IDC_SLIDER_PITCH, m_SliderPitch);
  51. DDX_Radio(pDX, IDC_RADIO_ENABLE_AUDIO, m_iEnableAudio);
  52. DDX_Radio(pDX, IDC_RADIO_PLAY_CONTINUOUS, m_iPlayContinuous);
  53. DDX_Text(pDX, IDC_TEXTURE_FILENAME, m_szName);
  54. //}}AFX_DATA_MAP
  55. }
  56. BEGIN_MESSAGE_MAP(CAnimPageAVI, CPropertyPage)
  57. //{{AFX_MSG_MAP(CAnimPageAVI)
  58. ON_BN_CLICKED(IDC_RADIO_ENABLE_AUDIO, OnRadioEnableAudio)
  59. ON_BN_CLICKED(IDC_RADIO_PLAY_CONTINUOUS, OnRadioPlayContinuous)
  60. ON_WM_VSCROLL()
  61. //}}AFX_MSG_MAP
  62. END_MESSAGE_MAP()
  63. /////////////////////////////////////////////////////////////////////////////
  64. // CAnimPageAVI message handlers
  65. BOOL CAnimPageAVI::OnInitDialog() 
  66. {
  67. // Let the base class do the default work
  68. CPropertyPage::OnInitDialog();
  69. // Set our local values to the Objects' values
  70. if(m_pAnimation)
  71. {
  72. m_szName = m_pAnimation->m_pAviMovie->m_szFileName;
  73. if(m_pAnimation->m_pAviMovie->m_bPlayContinuous)
  74. m_iPlayContinuous = 0;
  75. if(!m_pAnimation->m_pAviMovie->m_bEnableAudio)
  76. // Turn off the radio button
  77. m_iEnableAudio = -1;
  78. if(!m_pAnimation->m_pAviMovie->m_pAudioPlayer)
  79. {
  80. // Audio device is not open so disable the associated windows
  81. // Disable radio button
  82. GetDlgItem(IDC_RADIO_ENABLE_AUDIO)->EnableWindow(FALSE);
  83. // Disable slider controls
  84. GetDlgItem(IDC_SLIDER_PITCH)->EnableWindow(FALSE);
  85. GetDlgItem(IDC_SLIDER_VOLUMN)->EnableWindow(FALSE);
  86. // Turn off the radio button
  87. m_iEnableAudio = -1;
  88. }
  89. else
  90. {
  91. DWORD wResult; // error code
  92. DWORD dwVolumn;
  93. DWORD dwPitch;
  94. CAudioPlayer* pAudioPlayer = m_pAnimation->m_pAviMovie->m_pAudioPlayer;
  95. // Set the range of the volumn slider
  96. // (multiply return value by 3276.75 for a range of 0 to 65535)
  97. m_SliderVolumn.SetRange(0, 20); // Vertical slider: 0 = TOP
  98. // Set the range of the pitch slider
  99. // (multiply return value by 0.1 for a range of 0.0 to 2.0)
  100. m_SliderPitch.SetRange(0, 20); // Vertical slider: 0 = TOP
  101. wResult = pAudioPlayer->GetVolumn(&dwVolumn);
  102. if(!wResult)
  103. {
  104. UINT uLeftChannel; // Left channel volumn setting
  105. UINT uRightChannel; // Right channel volumn setting
  106. float fPos; // slider position (float)
  107. // Left channel is the lower 16 bits
  108. uLeftChannel  = (UINT)dwVolumn & 0x0000FFFF;
  109. // Right channel is the upper 16 bits
  110. uRightChannel = (UINT)(dwVolumn & 0xFFFF0000) >> 16;
  111. // Since we only display volumn settings for both channesl
  112. // we will use the left channel setting
  113. fPos = uLeftChannel/3276.75f;
  114. m_SliderVolumn.SetPos((int)(20-fPos));
  115. }
  116. wResult = pAudioPlayer->GetPitch(&dwPitch);
  117. if(!wResult)
  118. {
  119. int   iValue; // Signed integer value of the pitch
  120. float fValue; // Fractional portion of the pitch
  121. iValue = dwPitch >> 16; // Get the upper 16 bits
  122. fValue = (float)((dwPitch & 0x0000FFFF)/65535)*10;
  123. int pos = (iValue*10)+(int)fValue;
  124. m_SliderVolumn.SetPos(pos);
  125. }
  126. else
  127. // Pitch function not supported by device :(
  128. GetDlgItem(IDC_SLIDER_PITCH)->EnableWindow(FALSE);
  129. }
  130. }
  131. // Dialog box is being initialized (FALSE)
  132. // or data is being retrieved (TRUE).
  133. UpdateData(FALSE);
  134. return TRUE;  // return TRUE unless you set the focus to a control
  135.               // EXCEPTION: OCX Property Pages should return FALSE
  136. }
  137. void CAnimPageAVI::OnOK() 
  138. {
  139. // Dialog box is being initialized (FALSE)
  140. // or data is being retrieved (TRUE).
  141. UpdateData(TRUE);
  142. // Set our Objects' values to the local values
  143. if(m_pAnimation)
  144. {
  145. }
  146. CPropertyPage::OnOK();
  147. }
  148. void CAnimPageAVI::OnRadioEnableAudio() 
  149. {
  150. if(m_pAnimation)
  151. {
  152. // Toggle the radio selection
  153. if(m_pAnimation->m_pAviMovie->m_bEnableAudio)
  154. {
  155. m_pAnimation->m_pAviMovie->m_bEnableAudio = FALSE;
  156. m_iEnableAudio = -1;
  157. // Stop the AVI audio track
  158. m_pAnimation->m_pAviMovie->StopAudio();
  159. }
  160. else
  161. {
  162. m_pAnimation->m_pAviMovie->m_bEnableAudio = TRUE;
  163. m_iEnableAudio = 0;
  164. // Ensure that the 'StartAudio' flag is set.  This
  165. // will allow the audio track to synch with the
  166. // video track.
  167. m_pAnimation->m_pAviMovie->m_bStartAudio = TRUE;
  168. }
  169. // Initialize the Dialog Data (forces DoDataExchange)
  170. UpdateData(FALSE);
  171. }
  172. }
  173. void CAnimPageAVI::OnRadioPlayContinuous() 
  174. {
  175. if(m_pAnimation)
  176. {
  177. // Toggle the radio selection
  178. if(m_pAnimation->m_pAviMovie->m_bPlayContinuous)
  179. {
  180. m_pAnimation->m_pAviMovie->m_bPlayContinuous = FALSE;
  181. m_iPlayContinuous = -1;
  182. }
  183. else
  184. {
  185. m_pAnimation->m_pAviMovie->m_bPlayContinuous = TRUE;
  186. m_iPlayContinuous = 0;
  187. }
  188. // Initialize the Dialog Data (forces DoDataExchange)
  189. UpdateData(FALSE);
  190. }
  191. }
  192. void CAnimPageAVI::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  193. {
  194. CWnd* pWnd;
  195. // Determine which CScrollBar has send the OnVScroll message
  196. pWnd = GetDlgItem(IDC_SLIDER_VOLUMN);
  197. if(pWnd)
  198. {
  199. if(pWnd == pScrollBar)
  200. ProcessVolumnSlider(nSBCode, nPos, pScrollBar);
  201. }
  202. pWnd = GetDlgItem(IDC_SLIDER_PITCH);
  203. if(pWnd)
  204. {
  205. if(pWnd == pScrollBar)
  206. ProcessPitchSlider(nSBCode, nPos, pScrollBar);
  207. }
  208. // Call the base class procedure
  209. CPropertyPage::OnVScroll(nSBCode, nPos, pScrollBar);
  210. }
  211. void CAnimPageAVI::ProcessVolumnSlider(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  212. {
  213. CAudioPlayer* pAudioPlayer; // Audio player pointer
  214. UINT uLeftChannel; // Left channel volumn setting
  215. UINT uRightChannel; // Right channel volumn setting
  216. DWORD dwVolumn;
  217. // Get a pointer to our Audio player
  218. pAudioPlayer = m_pAnimation->m_pAviMovie->m_pAudioPlayer;
  219. if(!pAudioPlayer)
  220. return;
  221. // Process the slider commands
  222. if(nSBCode == SB_LINEUP) // nSBCode = 0
  223. {
  224. }
  225. if(nSBCode == SB_LINEDOWN) // nSBCode = 1
  226. {
  227. }
  228. if(nSBCode == SB_PAGEUP) // nSBCode = 2
  229. {
  230. }
  231. if(nSBCode == SB_PAGEDOWN) // nSBCode = 3
  232. {
  233. }
  234. if(nSBCode == SB_THUMBPOSITION) // nSBCode = 4
  235. {
  236. }
  237. if(nSBCode == SB_THUMBTRACK) // nSBCode = 5
  238. {
  239. // Left channel is the lower 16 bits
  240. uLeftChannel  = (UINT)((20-nPos)*3276.75f);
  241. // Right channel is the upper 16 bits
  242. uRightChannel = uLeftChannel << 16;
  243. dwVolumn = uLeftChannel+uRightChannel;
  244. pAudioPlayer->SetVolumn(dwVolumn);
  245. }
  246. }
  247. void CAnimPageAVI::ProcessPitchSlider(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  248. {
  249. CAudioPlayer* pAudioPlayer; // Audio player pointer
  250. // Get a pointer to our Audio player
  251. pAudioPlayer = m_pAnimation->m_pAviMovie->m_pAudioPlayer;
  252. if(!pAudioPlayer)
  253. return;
  254. // Process the slider commands
  255. if(nSBCode == SB_LINEUP) // nSBCode = 0
  256. {
  257. }
  258. if(nSBCode == SB_LINEDOWN) // nSBCode = 1
  259. {
  260. }
  261. if(nSBCode == SB_PAGEUP) // nSBCode = 2
  262. {
  263. }
  264. if(nSBCode == SB_PAGEDOWN) // nSBCode = 3
  265. {
  266. }
  267. if(nSBCode == SB_THUMBPOSITION) // nSBCode = 4
  268. {
  269. }
  270. if(nSBCode == SB_THUMBTRACK) // nSBCode = 5
  271. {
  272. }
  273. }