home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Extras / Sensaura / SDK1.0 / data1.cab / Example_Files / ZoomFX / lstnrdlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-13  |  15.1 KB  |  453 lines

  1. /*
  2.     Company:            Sensaura Ltd
  3.     Copyright:          (C) 1999
  4.  
  5.     File Name:            lstnrdlg.cpp
  6.     File Description:    Source file for implementation of ListenerDlg class
  7.     Author:                Adam Philp
  8.     Last Update:        22-DEC-99
  9.  
  10.     Target Compiler:    Microsoft Visual C++ Version 5.0
  11. */
  12.  
  13. ///////////////////////    Included files ////////////////////////////////////////////////////////////
  14.  
  15. #include <windows.h>
  16. #include <commctrl.h>
  17. #include <stdio.h>
  18.  
  19. #include "lstnrdlg.h"                    // ListenerDlg class declaration
  20. #include "directx.h"
  21. #include "debug.h"                        // Debugging support macros and functions
  22. #include "resource.h"                    // Resources
  23.  
  24. ///////////////////////    Definitions ///////////////////////////////////////////////////////////////
  25.  
  26. #define XYZ_SLIDER_MAX        100
  27. #define XYZ_SLIDER_MIN        (-XYZ_SLIDER_MAX)
  28. #define FACTOR_SLIDER_MAX    100
  29. #define FACTOR_SLIDER_MIN    0
  30. #define FACTOR_SLIDER_TIC    10
  31.  
  32. ///////////////////////    Constants /////////////////////////////////////////////////////////////////
  33.  
  34. DS3DLISTENER DefaultListener =
  35. {
  36.     sizeof ( DS3DLISTENER ),    /* dwSize */
  37.     { 0.0f, 0.0f, 0.0f },        /* vPosition */
  38.     { 0.0f, 0.0f, 0.0f },        /* vVelocity */
  39.     { 0.0f, 0.0f, 1.0f },        /* vOrientFront */
  40.     { 0.0f, 1.0f, 0.0f },        /* vOrientTop */
  41.     DS3D_DEFAULTDISTANCEFACTOR,    /* flDistanceFactor */
  42.     DS3D_DEFAULTROLLOFFFACTOR,    /* flRolloffFactor */
  43.     DS3D_DEFAULTDOPPLERFACTOR    /* flDopplerFactor */
  44. };
  45.  
  46. /////////////////////// ListenerDlg class implementation //////////////////////////////////////////
  47.  
  48. ListenerDlg::ListenerDlg()
  49. {
  50.     PTRACE("ListenerDlg::ListenerDlg()");
  51.  
  52.     m_hWnd = NULL;
  53.     m_hInstance = NULL;
  54.     m_pListener = NULL;
  55.  
  56.     m_hDistanceSlider = m_hDopplerSlider = m_hRolloffSlider = NULL;
  57.     m_hDistanceStatic = m_hDopplerStatic = m_hRolloffStatic = NULL;
  58.     m_hXSlider = m_hYSlider = m_hZSlider = NULL;
  59.     m_hXStatic = m_hYStatic = m_hZStatic = NULL;
  60.     m_hFrontXSlider = m_hFrontYSlider = m_hFrontZSlider = NULL;
  61.     m_hFrontXStatic = m_hFrontYStatic = m_hFrontZStatic = NULL;
  62.     m_hTopXSlider = m_hTopYSlider = m_hTopZSlider = NULL;
  63.     m_hTopXStatic = m_hTopYStatic = m_hTopZStatic = NULL;
  64.     m_hImmediateBtn = m_hDeferredBtn = NULL;
  65.     m_hCommitBtn = m_hDefaultBtn = NULL;
  66.  
  67.     m_dwApply = DS3D_IMMEDIATE;
  68. }
  69.  
  70. ListenerDlg::~ListenerDlg()
  71. {
  72.     PTRACE("ListenerDlg::~ListenerDlg()");
  73.  
  74.     if(m_hWnd)
  75.     {
  76.         DestroyWindow(m_hWnd);
  77.         m_hWnd = NULL;
  78.     }
  79.     m_hInstance = NULL;
  80.     m_pListener = NULL;
  81. }
  82.  
  83. /////////////////////// ListenerDlg public member functions ///////////////////////////////////////
  84.  
  85. bool ListenerDlg::Create(Application* pApp, LPDIRECTSOUND3DLISTENER pListener)
  86. {
  87.     char str[100];
  88.  
  89.     PTRACE("ListenerDlg::Create()");
  90.  
  91.     ASSERT(m_hWnd == NULL);
  92.     if(m_hWnd != NULL)
  93.     {
  94.         MessageBox(NULL, "Listener dialog already created", pApp->GetName(), MB_OK|MB_ICONSTOP);
  95.         return false;
  96.     }
  97.  
  98.     m_pListener = pListener;
  99.     m_hInstance = pApp->GetInstance();
  100.     m_hWnd = CreateDialogParam(m_hInstance, MAKEINTRESOURCE(IDD_LISTENER),
  101.                                pApp->GetMainWindow()->m_hWnd,
  102.                                (DLGPROC)ListenerDlgProc, (LPARAM)this);
  103.     if(m_hWnd == NULL)
  104.     {
  105.         MessageBox(NULL, "Cannot create listener dialog", pApp->GetName(), MB_OK|MB_ICONSTOP);
  106.         return false;
  107.     }
  108.  
  109.     LoadString(m_hInstance, IDS_LISTENERCAPTION, str, 99);
  110.     SetWindowText(m_hWnd, str);
  111.      pApp->GetMainWindow()->CascadeWindow(m_hWnd);
  112.     ::ShowWindow(m_hWnd, SW_SHOW);
  113.  
  114.     PTRACE("ListenerDlg::Create() OK");
  115.  
  116.     return true;
  117. }
  118.  
  119. /////////////////////// ListenerDlg protected member functions ////////////////////////////////////
  120.  
  121. BOOL ListenerDlg::OnInitDialog(HWND hDlg, WPARAM)
  122. {
  123.     m_hDistanceSlider = GetDlgItem(hDlg, IDC_DSLDISTANCE);
  124.     m_hDopplerSlider = GetDlgItem(hDlg, IDC_DSLDOPPLER);
  125.     m_hRolloffSlider = GetDlgItem(hDlg, IDC_DSLROLLOFF);
  126.     m_hDistanceStatic = GetDlgItem(hDlg, IDC_DSLDISTANCESTATIC);
  127.     m_hDopplerStatic = GetDlgItem(hDlg, IDC_DSLDOPPLERSTATIC);
  128.     m_hRolloffStatic = GetDlgItem(hDlg, IDC_DSLROLLOFFSTATIC);
  129.     m_hXSlider = GetDlgItem(hDlg, IDC_DSLPOSITIONX);
  130.     m_hYSlider = GetDlgItem(hDlg, IDC_DSLPOSITIONY);
  131.     m_hZSlider = GetDlgItem(hDlg, IDC_DSLPOSITIONZ);
  132.     m_hXStatic = GetDlgItem(hDlg, IDC_DSLPOSITIONXSTATIC);
  133.     m_hYStatic = GetDlgItem(hDlg, IDC_DSLPOSITIONYSTATIC);
  134.     m_hZStatic = GetDlgItem(hDlg, IDC_DSLPOSITIONZSTATIC);
  135.     m_hFrontXSlider = GetDlgItem(hDlg, IDC_DSLFRONTX);
  136.     m_hFrontYSlider = GetDlgItem(hDlg, IDC_DSLFRONTY);
  137.     m_hFrontZSlider = GetDlgItem(hDlg, IDC_DSLFRONTZ);
  138.     m_hFrontXStatic = GetDlgItem(hDlg, IDC_DSLFRONTXSTATIC);
  139.     m_hFrontYStatic = GetDlgItem(hDlg, IDC_DSLFRONTYSTATIC);
  140.     m_hFrontZStatic = GetDlgItem(hDlg, IDC_DSLFRONTZSTATIC);
  141.     m_hTopXSlider = GetDlgItem(hDlg, IDC_DSLTOPX);
  142.     m_hTopYSlider = GetDlgItem(hDlg, IDC_DSLTOPY);
  143.     m_hTopZSlider = GetDlgItem(hDlg, IDC_DSLTOPZ);
  144.     m_hTopXStatic = GetDlgItem(hDlg, IDC_DSLTOPXSTATIC);
  145.     m_hTopYStatic = GetDlgItem(hDlg, IDC_DSLTOPYSTATIC);
  146.     m_hTopZStatic = GetDlgItem(hDlg, IDC_DSLTOPZSTATIC);
  147.     m_hImmediateBtn = GetDlgItem(hDlg, IDC_DSLIMMEDIATE);
  148.     m_hDeferredBtn = GetDlgItem(hDlg, IDC_DSLDEFERRED);
  149.     m_hCommitBtn = GetDlgItem(hDlg, IDC_DSLCOMMIT);
  150.     m_hDefaultBtn = GetDlgItem(hDlg, IDC_DSLDEFAULT);
  151.  
  152.     SendMessage(m_hDistanceSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(FACTOR_SLIDER_MIN, FACTOR_SLIDER_MAX));
  153.     SendMessage(m_hDistanceSlider, TBM_SETTICFREQ, (WPARAM)FACTOR_SLIDER_TIC, 0);
  154.     SendMessage(m_hDopplerSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(FACTOR_SLIDER_MIN, FACTOR_SLIDER_MAX));
  155.     SendMessage(m_hDopplerSlider, TBM_SETTICFREQ, (WPARAM)FACTOR_SLIDER_TIC, 0);
  156.     SendMessage(m_hRolloffSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(FACTOR_SLIDER_MIN, FACTOR_SLIDER_MAX));
  157.     SendMessage(m_hRolloffSlider, TBM_SETTICFREQ, (WPARAM)FACTOR_SLIDER_TIC, 0);
  158.  
  159.     SendMessage(m_hXSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  160.     SendMessage(m_hXSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  161.     SendMessage(m_hYSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  162.     SendMessage(m_hYSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  163.     SendMessage(m_hZSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  164.     SendMessage(m_hZSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  165.  
  166.     SendMessage(m_hFrontXSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  167.     SendMessage(m_hFrontXSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  168.     SendMessage(m_hFrontYSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  169.     SendMessage(m_hFrontYSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  170.     SendMessage(m_hFrontZSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  171.     SendMessage(m_hFrontZSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  172.  
  173.     SendMessage(m_hTopXSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  174.     SendMessage(m_hTopXSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  175.     SendMessage(m_hTopYSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  176.     SendMessage(m_hTopYSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  177.     SendMessage(m_hTopZSlider, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(XYZ_SLIDER_MIN, XYZ_SLIDER_MAX));
  178.     SendMessage(m_hTopZSlider, TBM_SETTICFREQ, (WPARAM)XYZ_SLIDER_MAX, 0);
  179.  
  180.     InitControls(hDlg);
  181.     return TRUE;
  182. }
  183.  
  184. BOOL ListenerDlg::OnCommand(WPARAM wParam, LPARAM/* lParam*/)
  185. {
  186.     if(HIWORD(wParam) == BN_CLICKED)
  187.     {
  188.         switch(LOWORD(wParam))
  189.         {
  190.         case IDC_DSLIMMEDIATE:
  191.             EnableWindow(m_hCommitBtn, FALSE);
  192.             m_dwApply = DS3D_IMMEDIATE;
  193.             break;
  194.  
  195.         case IDC_DSLDEFERRED:
  196.             EnableWindow(m_hCommitBtn, TRUE);
  197.             m_dwApply = DS3D_DEFERRED;
  198.             break;
  199.  
  200.         case IDC_DSLCOMMIT:
  201.             m_pListener->CommitDeferredSettings();
  202.             InitControls(m_hWnd);
  203.             EnableWindow(m_hCommitBtn, m_dwApply == DS3D_DEFERRED ? TRUE : FALSE);
  204.             break;
  205.  
  206.         case IDC_DSLDEFAULT:
  207.             m_pListener->SetAllParameters(&DefaultListener, DS3D_IMMEDIATE);
  208.             InitControls(m_hWnd);
  209.             break;
  210.         }
  211.     }
  212.  
  213.     return FALSE;
  214. }
  215.  
  216. BOOL ListenerDlg::OnHScroll(WORD wNotifyCode, LONG lPos, HWND hwndCtl)
  217. {
  218.     int id;
  219.  
  220.     ASSERT(hwndCtl);
  221.     id = GetDlgCtrlID(hwndCtl);
  222.     switch(id)
  223.     {
  224.     case IDC_DSLDISTANCE:
  225.     case IDC_DSLDOPPLER:
  226.     case IDC_DSLROLLOFF:
  227.         SetFactors();
  228.         break;
  229.  
  230.     case IDC_DSLPOSITIONX:
  231.     case IDC_DSLPOSITIONY:
  232.     case IDC_DSLPOSITIONZ:
  233.         SetPosition();
  234.         break;
  235.  
  236.     case IDC_DSLFRONTX:
  237.     case IDC_DSLFRONTY:
  238.     case IDC_DSLFRONTZ:
  239.     case IDC_DSLTOPX:
  240.     case IDC_DSLTOPY:
  241.     case IDC_DSLTOPZ:
  242.         SetOrientation();
  243.         break;
  244.     }
  245.     return TRUE;
  246. }
  247.  
  248. void ListenerDlg::OnDestroy()
  249. {
  250. }
  251.  
  252. BOOL CALLBACK ListenerDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  253. {
  254.     ListenerDlg* pDlg;
  255.  
  256.     switch(message)
  257.     {
  258.     case WM_INITDIALOG:
  259.         PTRACE("ListenerDlgProc():WM_INITDIALOG");
  260.  
  261.         ASSERT(lParam != NULL);
  262.         pDlg = (ListenerDlg*)lParam;
  263.         SetWindowLong(hDlg, DWL_USER, (LONG)pDlg);
  264.  
  265.         if(!pDlg->OnInitDialog(hDlg, wParam))
  266.             DestroyWindow(hDlg);
  267.         return TRUE;
  268.  
  269.     case WM_HSCROLL:
  270.         PTRACE("ListenerDlgProc():WM_HSCROLL");
  271.         pDlg = (ListenerDlg*)GetWindowLong(hDlg, DWL_USER);
  272.         ASSERT(pDlg != NULL);
  273.         return !pDlg->OnHScroll(LOWORD(wParam), (LONG)HIWORD(wParam), (HWND)lParam);
  274.  
  275.     case WM_COMMAND:
  276.         PTRACE("ListenerDlgProc():WM_COMMAND");
  277.         pDlg = (ListenerDlg*)GetWindowLong(hDlg, DWL_USER);
  278.         // It's possible to get child notifications before the
  279.         // INITDIALOG message, so we'll handle a NULL class item
  280.         // here a less stringently
  281.         if(!pDlg)
  282.             return FALSE;
  283.         return !pDlg->OnCommand(wParam, lParam);
  284.  
  285.     case WM_DESTROY:
  286.         PTRACE("ListenerDlgProc():WM_DESTROY");
  287.         pDlg = (ListenerDlg*)GetWindowLong(hDlg, DWL_USER);
  288.         ASSERT(pDlg != NULL);
  289.         pDlg->OnDestroy();
  290.         return TRUE;
  291.  
  292.     default:
  293.         return FALSE;
  294.     }
  295. }
  296.  
  297. BOOL ListenerDlg::InitControls(HWND hWnd)
  298. {
  299.     DS3DLISTENER    listener;
  300.  
  301.     PTRACE("ListenerDlg():InitControls()");
  302.     listener.dwSize = sizeof(DS3DLISTENER);
  303.     TRY_DS(m_pListener->GetAllParameters(&listener))
  304.  
  305.     SendMessage(m_hDistanceSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.flDistanceFactor*10.0f));
  306.     SendMessage(m_hDopplerSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.flDopplerFactor*10.0f));
  307.     SendMessage(m_hRolloffSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.flRolloffFactor*10.0f));
  308.  
  309.     SendMessage(m_hXSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)listener.vPosition.x);
  310.     SendMessage(m_hYSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)listener.vPosition.y);
  311.     SendMessage(m_hZSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)listener.vPosition.z);
  312.  
  313.     SendMessage(m_hFrontXSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientFront.x*XYZ_SLIDER_MAX));
  314.     SendMessage(m_hFrontYSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientFront.y*XYZ_SLIDER_MAX));
  315.     SendMessage(m_hFrontZSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientFront.z*XYZ_SLIDER_MAX));
  316.     SendMessage(m_hTopXSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientTop.x*XYZ_SLIDER_MAX));
  317.     SendMessage(m_hTopYSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientTop.y*XYZ_SLIDER_MAX));
  318.     SendMessage(m_hTopZSlider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(listener.vOrientTop.z*XYZ_SLIDER_MAX));
  319.  
  320.     if(m_dwApply == DS3D_IMMEDIATE)
  321.     {
  322.         CheckRadioButton(hWnd, IDC_DSLIMMEDIATE, IDC_DSLDEFERRED, IDC_DSLIMMEDIATE);
  323.         EnableWindow(m_hCommitBtn, FALSE);
  324.     }
  325.     else
  326.     {
  327.         CheckRadioButton(hWnd, IDC_DSLIMMEDIATE, IDC_DSLDEFERRED, IDC_DSLDEFERRED);
  328.         EnableWindow(m_hCommitBtn, TRUE);
  329.     }
  330.  
  331.     SetFactorStatics();
  332.     SetPositionStatics();
  333.     SetOrientationStatics();
  334.  
  335.     return TRUE;
  336.  
  337. DS_ERROR:
  338.     return FALSE;
  339. }
  340.  
  341. void ListenerDlg::SetFactors()
  342. {
  343.     D3DVALUE    flFactor;
  344.  
  345.     flFactor = (D3DVALUE)SendMessage(m_hDistanceSlider, TBM_GETPOS, 0, 0)/10.0f;
  346.     if(flFactor < 0.1f)
  347.         flFactor = 0.1f;
  348.  
  349.     m_pListener->SetDistanceFactor(flFactor, m_dwApply);
  350.     flFactor = (D3DVALUE)SendMessage(m_hDopplerSlider, TBM_GETPOS, 0, 0)/10.0f;
  351.     m_pListener->SetDopplerFactor(flFactor, m_dwApply);
  352.     flFactor = (D3DVALUE)SendMessage(m_hRolloffSlider, TBM_GETPOS, 0, 0)/10.0f;
  353.     m_pListener->SetRolloffFactor(flFactor, m_dwApply);
  354.  
  355.     SetFactorStatics();
  356. }
  357.  
  358. void ListenerDlg::SetPosition()
  359. {
  360.     D3DVECTOR    pos;
  361.  
  362.     pos.x = (D3DVALUE)SendMessage(m_hXSlider, TBM_GETPOS, 0, 0);
  363.     pos.y = (D3DVALUE)SendMessage(m_hYSlider, TBM_GETPOS, 0, 0);
  364.     pos.z = (D3DVALUE)SendMessage(m_hZSlider, TBM_GETPOS, 0, 0);
  365.  
  366.     m_pListener->SetPosition(pos.x, pos.y, pos.z, m_dwApply);
  367.     SetPositionStatics();
  368. }
  369.  
  370. void ListenerDlg::SetOrientation()
  371. {
  372.     D3DVECTOR    front;
  373.     D3DVECTOR    top;
  374.  
  375.     front.x = (D3DVALUE)SendMessage(m_hFrontXSlider, TBM_GETPOS, 0, 0);
  376.     front.y = (D3DVALUE)SendMessage(m_hFrontYSlider, TBM_GETPOS, 0, 0);
  377.     front.z = (D3DVALUE)SendMessage(m_hFrontZSlider, TBM_GETPOS, 0, 0);
  378.     top.x = (D3DVALUE)SendMessage(m_hTopXSlider, TBM_GETPOS, 0, 0);
  379.     top.y = (D3DVALUE)SendMessage(m_hTopYSlider, TBM_GETPOS, 0, 0);
  380.     top.z = (D3DVALUE)SendMessage(m_hTopZSlider, TBM_GETPOS, 0, 0);
  381.  
  382.     m_pListener->SetOrientation(front.x/XYZ_SLIDER_MAX, front.y/XYZ_SLIDER_MAX, front.z/XYZ_SLIDER_MAX, 
  383.                                 top.x/XYZ_SLIDER_MAX, top.y/XYZ_SLIDER_MAX, top.z/XYZ_SLIDER_MAX, 
  384.                                 DS3D_DEFERRED);
  385.     EnableWindow(m_hCommitBtn, TRUE);
  386.     SetOrientationStatics();
  387. }
  388.  
  389. void ListenerDlg::SetFactorStatics()
  390. {
  391.     D3DVALUE    flFactor;
  392.     char        str[20];
  393.  
  394.     flFactor = (D3DVALUE)SendMessage(m_hDistanceSlider, TBM_GETPOS, 0, 0)/10.0f;
  395.     if(flFactor < 0.1f)
  396.         flFactor = 0.1f;
  397.     sprintf(str, "Distance:%.1f", flFactor);
  398.     SetWindowText(m_hDistanceStatic, str);
  399.  
  400.     flFactor = (D3DVALUE)SendMessage(m_hDopplerSlider, TBM_GETPOS, 0, 0)/10.0f;
  401.     sprintf(str, "Doppler:%.1f", flFactor);
  402.     SetWindowText(m_hDopplerStatic, str);
  403.  
  404.     flFactor = (D3DVALUE)SendMessage(m_hRolloffSlider, TBM_GETPOS, 0, 0)/10.0f;
  405.     sprintf(str, "Rolloff:%.1f", flFactor);
  406.     SetWindowText(m_hRolloffStatic, str);
  407. }
  408.  
  409. void ListenerDlg::SetPositionStatics()
  410. {
  411.     D3DVECTOR    pos;
  412.     char        str[20];
  413.  
  414.     pos.x = (D3DVALUE)SendMessage(m_hXSlider, TBM_GETPOS, 0, 0);
  415.     pos.y = (D3DVALUE)SendMessage(m_hYSlider, TBM_GETPOS, 0, 0);
  416.     pos.z = (D3DVALUE)SendMessage(m_hZSlider, TBM_GETPOS, 0, 0);
  417.  
  418.     sprintf(str, "X:%.0f", pos.x);
  419.     SetWindowText(m_hXStatic, str);
  420.     sprintf(str, "Y:%.0f", pos.y);
  421.     SetWindowText(m_hYStatic, str);
  422.     sprintf(str, "Z:%.0f", pos.z);
  423.     SetWindowText(m_hZStatic, str);
  424. }
  425.  
  426. void ListenerDlg::SetOrientationStatics()
  427. {
  428.     D3DVECTOR    front, top;
  429.     char        str[20];
  430.  
  431.     front.x = (D3DVALUE)SendMessage(m_hFrontXSlider, TBM_GETPOS, 0, 0);
  432.     front.y = (D3DVALUE)SendMessage(m_hFrontYSlider, TBM_GETPOS, 0, 0);
  433.     front.z = (D3DVALUE)SendMessage(m_hFrontZSlider, TBM_GETPOS, 0, 0);
  434.     top.x = (D3DVALUE)SendMessage(m_hTopXSlider, TBM_GETPOS, 0, 0);
  435.     top.y = (D3DVALUE)SendMessage(m_hTopYSlider, TBM_GETPOS, 0, 0);
  436.     top.z = (D3DVALUE)SendMessage(m_hTopZSlider, TBM_GETPOS, 0, 0);
  437.  
  438.     sprintf(str, "X:%.2f", front.x/XYZ_SLIDER_MAX);
  439.     SetWindowText(m_hFrontXStatic, str);
  440.     sprintf(str, "Y:%.2f", front.y/XYZ_SLIDER_MAX);
  441.     SetWindowText(m_hFrontYStatic, str);
  442.     sprintf(str, "Z:%.2f", front.z/XYZ_SLIDER_MAX);
  443.     SetWindowText(m_hFrontZStatic, str);
  444.  
  445.     sprintf(str, "X:%.2f", top.x/XYZ_SLIDER_MAX);
  446.     SetWindowText(m_hTopXStatic, str);
  447.     sprintf(str, "Y:%.2f", top.y/XYZ_SLIDER_MAX);
  448.     SetWindowText(m_hTopYStatic, str);
  449.     sprintf(str, "Z:%.2f", top.z/XYZ_SLIDER_MAX);
  450.     SetWindowText(m_hTopZStatic, str);
  451. }
  452.  
  453.