HandVuFilterProp.cpp
上传用户:lijia5631
上传日期:2008-11-10
资源大小:1214k
文件大小:7k
源码类别:

视频捕捉/采集

开发平台:

MultiPlatform

  1. /**   * HandVu - a library for computer vision-based hand gesture   * recognition.   * Copyright (C) 2004 Mathias Kolsch, matz@cs.ucsb.edu   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version.   *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place - Suite 330,    * Boston, MA  02111-1307, USA.   *   * $Id: HandVuFilterProp.cpp,v 1.5 2005/10/30 23:00:43 matz Exp $ **/ #include "StdAfx.h"
  2. //#include <windowsx.h>
  3. //#include <commctrl.h>
  4. //#include <olectl.h>
  5. //#include <memory.h>
  6. //#include <tchar.h>
  7. #include "resource.h"
  8. #include "HandVuFilterGUIDs.h"
  9. #include "Common.h"
  10. #include "HandVuFilter.h"
  11. #include "HandVuFilterProp.h"
  12. //
  13. // CreateInstance
  14. //
  15. // Used by the DirectShow base classes to create instances
  16. //
  17. CUnknown*
  18. CHandVuFilterProperties::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr)
  19. {
  20.   CUnknown *punk = new CHandVuFilterProperties(lpunk, phr);
  21.   if (punk == NULL) {
  22.     *phr = E_OUTOFMEMORY;
  23.   }
  24.   return punk;
  25. } // CreateInstance
  26. //
  27. // Constructor
  28. //
  29. CHandVuFilterProperties::CHandVuFilterProperties(LPUNKNOWN pUnk, HRESULT *phr) :
  30.   CBasePropertyPage(NAME("HandVuFilter Property Page"),
  31.                     pUnk,IDD_HandVuFilterPROP,IDS_TITLE),
  32.   m_pIHandVuFilter(NULL),
  33.   m_bIsInitialized(FALSE)
  34. {
  35.   ASSERT(phr);
  36. } // (Constructor)
  37. //
  38. // OnReceiveMessage
  39. //
  40. // Handles the messages for our property window
  41. //
  42. BOOL CHandVuFilterProperties::OnReceiveMessage(HWND hwnd,
  43.                                                 UINT uMsg,
  44.                                                 WPARAM wParam,
  45.                                                 LPARAM lParam)
  46. {
  47.   if (!m_bIsInitialized) {
  48.     return (LRESULT) 1;
  49.   }
  50.   switch (uMsg)
  51.     {
  52.     case WM_HSCROLL:
  53.       {
  54.         if (m_params.immediate_apply) {
  55.           OnApplyChanges();
  56.         } else {
  57.           m_bDirty = TRUE;
  58.           if (m_pPageSite) {
  59.             m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
  60.           }
  61.         }
  62.         return (LRESULT) 1;
  63.         break;
  64.       }
  65.     case WM_COMMAND:
  66.       {
  67.         if (m_params.immediate_apply) {
  68.           OnApplyChanges();
  69.         } else {
  70.           m_bDirty = TRUE;
  71.           if (m_pPageSite) {
  72.             m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
  73.           }
  74.         }
  75.         return (LRESULT) 1;
  76.         break;
  77.       }
  78.     }
  79.   return (BOOL) CBasePropertyPage::OnReceiveMessage(hwnd,uMsg,wParam,lParam);
  80. } // OnReceiveMessage
  81. //
  82. // OnConnect
  83. //
  84. // Called when we connect to a transform filter
  85. //
  86. HRESULT CHandVuFilterProperties::OnConnect(IUnknown *pUnknown)
  87. {
  88.   ASSERT(m_pIHandVuFilter == NULL);
  89.   HRESULT hr = pUnknown->QueryInterface(IID_IHandVuFilter,
  90.                                         (void **) &m_pIHandVuFilter);
  91.   if (FAILED(hr)) {
  92.     return E_NOINTERFACE;
  93.   }
  94.   ASSERT(m_pIHandVuFilter);
  95.   // Get the initial image FX property
  96.   m_pIHandVuFilter->GetHandVuFilterParams(m_params);
  97.   m_bIsInitialized = FALSE ;
  98.   return NOERROR;
  99. } // OnConnect
  100. //
  101. // OnDisconnect
  102. //
  103. // Likewise called when we disconnect from a filter
  104. //
  105. HRESULT CHandVuFilterProperties::OnDisconnect()
  106. {
  107.   // Release of Interface after setting the appropriate old effect value
  108.   if (m_pIHandVuFilter == NULL) {
  109.     return E_UNEXPECTED;
  110.   }
  111.   m_pIHandVuFilter->Release();
  112.   m_pIHandVuFilter = NULL;
  113.   return NOERROR;
  114. } // OnDisconnect
  115. //
  116. // OnActivate
  117. //
  118. // We are being activated
  119. //
  120. HRESULT CHandVuFilterProperties::OnActivate()
  121. {
  122.   CheckDlgButton(m_Dlg, IDC_IMMEDIATE_APPLY, m_params.immediate_apply );
  123.   m_bIsInitialized = TRUE;
  124.   return NOERROR;
  125. } // OnActivate
  126. //
  127. // OnDeactivate
  128. //
  129. // We are being deactivated
  130. //
  131. HRESULT CHandVuFilterProperties::OnDeactivate(void)
  132. {
  133.   ASSERT(m_pIHandVuFilter);
  134.   m_bIsInitialized = FALSE;
  135.   GetControlValues();
  136.   return NOERROR;
  137. } // OnDeactivate
  138. void CHandVuFilterProperties::InitSlider( int id, int lower, int upper,
  139.                                            int tic_freq )
  140. {
  141.   HWND slider = GetDlgItem( m_Dlg, id );
  142.   if( slider )
  143.     {
  144.       SendMessage( slider, TBM_SETRANGE, TRUE, MAKELONG(lower, upper) );
  145.       if( tic_freq > 0 )
  146.         {
  147.           SendMessage( slider, TBM_SETTICFREQ, tic_freq, 0 );
  148.         }
  149.     }
  150. }
  151. void CHandVuFilterProperties::SetSliderPos( int id, int pos )
  152. {
  153.   HWND slider = GetDlgItem( m_Dlg, id );
  154.   if( slider )
  155.     {
  156.       SendMessage( slider, TBM_SETPOS, TRUE, pos );
  157.     }
  158. }
  159. int CHandVuFilterProperties::GetSliderPos( int id )
  160. {
  161.   HWND slider = GetDlgItem( m_Dlg, id );
  162.   int pos = 0;
  163.   if( slider )
  164.     {
  165.       pos = (int) SendMessage( slider, TBM_GETPOS, 0, 0 );
  166.     }
  167.   return pos;
  168. }
  169. void CHandVuFilterProperties::SetText( int idc_textbox, int pos ) {
  170.   const int szlen = 4;
  171.   TCHAR sz[szlen];
  172.   Edit_GetText(GetDlgItem(m_Dlg, idc_textbox), sz, 4);
  173.   if (pos != atoi(sz)) {
  174.     //StringCbPrintf(sz, szlen*sizeof(TCHAR), TEXT("%2.d"), pos);
  175.     _stprintf(sz, TEXT("%2.d"), pos);
  176.     Edit_SetText(GetDlgItem(m_Dlg, idc_textbox), sz);
  177.   }
  178. }
  179. int CHandVuFilterProperties::GetText( int idc_textbox ) {
  180.   TCHAR sz[4];
  181.   Edit_GetText(GetDlgItem(m_Dlg, idc_textbox), sz, 4);
  182.   return atoi(sz);
  183. }
  184. void CHandVuFilterProperties::SetTextSliderCombination( int idc_textbox,
  185.                                                          int idc_slider,
  186.                                                          int pos ) {
  187.   if (pos != GetSliderPos( idc_slider )) {
  188.     SetSliderPos(idc_slider, pos);
  189.   }
  190.   const int szlen = 4;
  191.   TCHAR sz[szlen];
  192.   Edit_GetText(GetDlgItem(m_Dlg, idc_textbox), sz, 4);
  193.   if (pos != atoi(sz)) {
  194.     //StringCbPrintf(sz, szlen*sizeof(TCHAR), TEXT("%2.d"), pos);
  195.     _stprintf(sz, TEXT("%2.d"), pos);
  196.     Edit_SetText(GetDlgItem(m_Dlg, idc_textbox), sz);
  197.   }
  198. }
  199. int CHandVuFilterProperties::GetTextSliderCombination(int idc_textbox,
  200.                                                        int idc_slider,
  201.                                                        int val_old) {
  202.   int val_textbox;
  203.   int val_slider;
  204.   TCHAR sz[4];
  205.   Edit_GetText(GetDlgItem(m_Dlg, idc_textbox), sz, 4);
  206.   val_textbox = atoi(sz);
  207.   // Quick validatation of the field
  208.   if (val_textbox < 0) val_textbox = 0;
  209.   if (val_textbox > 255) val_textbox = 255;
  210.   val_slider = GetSliderPos( idc_slider );
  211.   // textbox has priority
  212.   if (val_old != val_textbox) {
  213.     return val_textbox;
  214.   } else if (val_old != val_slider) {
  215.     return val_slider;
  216.   } else {
  217.     return val_old;
  218.   }
  219. }
  220. //
  221. // OnApplyChanges
  222. //
  223. // Apply any changes so far made
  224. //
  225. HRESULT CHandVuFilterProperties::OnApplyChanges()
  226. {
  227.   GetControlValues();
  228.   m_pIHandVuFilter->SetHandVuFilterParams(m_params);
  229.   return NOERROR;
  230. } // OnApplyChanges
  231. void CHandVuFilterProperties::GetControlValues()
  232. {
  233.   ASSERT(m_pIHandVuFilter);
  234.   m_params.immediate_apply = IsDlgButtonChecked(m_Dlg, IDC_IMMEDIATE_APPLY );
  235. }