home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / ba / tvxsamp / tvxsampdlg.cpp < prev    next >
C/C++ Source or Header  |  1997-09-15  |  7KB  |  251 lines

  1. //---------------------------------------------------------------------------------
  2. // TVXSampDlg.cpp : TV Viewer sample application
  3. //---------------------------------------------------------------------------------
  4. // Copyright (C) 1997 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Broadcast Architecture Programmer's Reference.
  9. // For more information about writing applications that interact
  10. // with TV Viewer, see `` Creating TV Viewer Controls ``
  11. // in the Broadcast Architecture Programmer's Reference.
  12. //
  13. //
  14.  
  15. #include "stdafx.h"
  16. #include "TVXSamp.h"
  17. #include "TVXSampDlg.h"
  18. #include "DlgProxy.h"
  19. #include "Tvdisp.h"
  20. #include <atlbase.h>
  21.  
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27.  
  28. ITVViewer *TVX;
  29.  
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CTVXSampDlg dialog
  32.  
  33. IMPLEMENT_DYNAMIC(CTVXSampDlg, CDialog);
  34.  
  35. CTVXSampDlg::CTVXSampDlg(CWnd* pParent /*=NULL*/)
  36.     : CDialog(CTVXSampDlg::IDD, pParent)
  37. {
  38.     //{{AFX_DATA_INIT(CTVXSampDlg)
  39.         // NOTE: the ClassWizard will add member initialization here
  40.     //}}AFX_DATA_INIT
  41.     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  42.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  43.     m_pAutoProxy = NULL;
  44. }
  45.  
  46. CTVXSampDlg::~CTVXSampDlg()
  47. {
  48.     // If there is an automation proxy for this dialog, set
  49.     //  its back pointer to this dialog to NULL, so it knows
  50.     //  the dialog has been deleted.
  51.     if (m_pAutoProxy != NULL)
  52.         m_pAutoProxy->m_pDialog = NULL;
  53. }
  54.  
  55. void CTVXSampDlg::DoDataExchange(CDataExchange* pDX)
  56. {
  57.     CDialog::DoDataExchange(pDX);
  58.     //{{AFX_DATA_MAP(CTVXSampDlg)
  59.         // NOTE: the ClassWizard will add DDX and DDV calls here
  60.     //}}AFX_DATA_MAP
  61. }
  62.  
  63. BEGIN_MESSAGE_MAP(CTVXSampDlg, CDialog)
  64.     //{{AFX_MSG_MAP(CTVXSampDlg)
  65.     ON_WM_PAINT()
  66.     ON_WM_QUERYDRAGICON()
  67.     ON_WM_CLOSE()
  68.     ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  69.     ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  70.     ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
  71.     //}}AFX_MSG_MAP
  72. END_MESSAGE_MAP()
  73.  
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CTVXSampDlg message handlers
  76.  
  77. BOOL CTVXSampDlg::OnInitDialog()
  78. {
  79.     CDialog::OnInitDialog();
  80.  
  81.     // Set the icon for this dialog.  The framework does this automatically
  82.     //  when the application's main window is not a dialog
  83.     SetIcon(m_hIcon, TRUE);            // Set big icon
  84.     SetIcon(m_hIcon, FALSE);        // Set small icon
  85.     
  86.     // TODO: Add extra initialization here
  87.     
  88.     return TRUE;  // return TRUE  unless you set the focus to a control
  89. }
  90.  
  91. // If you add a minimize button to your dialog, you will need the code below
  92. //  to draw the icon.  For MFC applications using the document/view model,
  93. //  this is automatically done for you by the framework.
  94.  
  95. void CTVXSampDlg::OnPaint() 
  96. {
  97.     if (IsIconic())
  98.     {
  99.         CPaintDC dc(this); // device context for painting
  100.  
  101.         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  102.  
  103.         // Center icon in client rectangle
  104.         int cxIcon = GetSystemMetrics(SM_CXICON);
  105.         int cyIcon = GetSystemMetrics(SM_CYICON);
  106.         CRect rect;
  107.         GetClientRect(&rect);
  108.         int x = (rect.Width() - cxIcon + 1) / 2;
  109.         int y = (rect.Height() - cyIcon + 1) / 2;
  110.  
  111.         // Draw the icon
  112.         dc.DrawIcon(x, y, m_hIcon);
  113.     }
  114.     else
  115.     {
  116.         CDialog::OnPaint();
  117.     }
  118. }
  119.  
  120. // The system calls this to obtain the cursor to display while the user drags
  121. //  the minimized window.
  122. HCURSOR CTVXSampDlg::OnQueryDragIcon()
  123. {
  124.     return (HCURSOR) m_hIcon;
  125. }
  126.  
  127. // Automation servers should not exit when a user closes the UI
  128. //  if a controller still holds on to one of its objects.  These
  129. //  message handlers make sure that if the proxy is still in use,
  130. //  then the UI is hidden but the dialog remains around if it
  131. //  is dismissed.
  132.  
  133. void CTVXSampDlg::OnClose() 
  134. {
  135.     if (CanExit())
  136.         CDialog::OnClose();
  137. }
  138.  
  139. void CTVXSampDlg::OnOK() 
  140. {
  141.     if (CanExit())
  142.         CDialog::OnOK();
  143. }
  144.  
  145. void CTVXSampDlg::OnCancel() 
  146. {
  147.     if (CanExit())
  148.         CDialog::OnCancel();
  149. }
  150.  
  151. BOOL CTVXSampDlg::CanExit()
  152. {
  153.     // If the proxy object is still around, then the automation
  154.     //  controller is still holding on to this application.  Leave
  155.     //  the dialog around, but hide its UI.
  156.     if (m_pAutoProxy != NULL)
  157.     {
  158.         ShowWindow(SW_HIDE);
  159.         return FALSE;
  160.     }
  161.  
  162.     return TRUE;
  163. }
  164.  
  165. //-----------< event handler that toggles TV Viewer mode >-----------
  166. //---------------------------------------------------------------------------------
  167. /*
  168. The following code implements an event handler 
  169. that toggles TV Viewer between desktop and full 
  170. screen mode when the user clicks Button1. It checks 
  171. which mode TV Viewer is displaying in, and toggles 
  172. it to the other mode. For example, if TV Viewer is 
  173. in desktop mode, this method sets it to full screen
  174. mode and vide versa.
  175. */
  176.  
  177. void CTVXSampDlg::OnButton1() 
  178. {
  179.     
  180.     //check whether TV Viewer is in 
  181.     //full screen mode
  182.     if (TVX->IsTVMode())
  183.     {
  184.         //if it is, 
  185.         //change the mode to desktop
  186.         TVX->SetTVMode(false);
  187.     }
  188.     else    
  189.     {
  190.         //if it is not,
  191.         //change the mode to full screen
  192.         TVX->SetTVMode(true);
  193.     }
  194.     
  195. }
  196.  
  197.  
  198. //-----< event handler that tunes TV Viewer to a new channel >------
  199. //---------------------------------------------------------------------------------
  200. /*
  201. The following code implements an event handler 
  202. that tunes TV Viewer to the TV configuration 
  203. channel when they click Button2. 
  204.  
  205. The TV configuration channel was chosen for 
  206. this example because it is installed with TV Viewer 
  207. and is present on all client machines. 
  208. */
  209. void CTVXSampDlg::OnButton2() 
  210. {
  211.  
  212.     //Tune TVViewer to channel 1 of tuning space -2
  213.     //the audio and video substreams have been set to 
  214.     //-1, causing TV Viewer to use the default values.
  215.  
  216.     TVX->Tune(-2,1,-1,-1,NULL);
  217.  
  218. }
  219.  
  220.  
  221. //---------< event handler that tunes to a previous channel >-----------
  222. //---------------------------------------------------------------------------------
  223. /*
  224. The following code implements an event handler that 
  225. tunes TV Viewer to the previously displayed channel 
  226. when the user clicks Button4. 
  227. */
  228.  
  229. void CTVXSampDlg::OnButton4() 
  230. {
  231.     long lTuningSpacePrev;
  232.     long lChannelNumberPrev;
  233.     long lAudioStreamPrev;
  234.     long lVideoStreamPrev;
  235.     BSTR bstrIPAddressPrev;
  236.  
  237.     //get the tuning information about the previous channel
  238.     //from TV Viewer
  239.     TVX->GetPreviousTuningInfo(&lTuningSpacePrev, &lChannelNumberPrev,
  240.              &lVideoStreamPrev, &lAudioStreamPrev, &bstrIPAddressPrev);
  241.  
  242.     if ((lTuningSpacePrev != NULL) && (lChannelNumberPrev != NULL))
  243.     {
  244.         //Tune TV Viewer to the previous channel
  245.         TVX->Tune(lTuningSpacePrev, lChannelNumberPrev,
  246.                 lVideoStreamPrev, lAudioStreamPrev, (LPCTSTR) bstrIPAddressPrev);
  247.     }
  248.  
  249. }
  250.  
  251.