www.pudn.com > DalsaNetlink.rar > CySignalDialog.cpp
// CySignalDialog.cpp : implementation file
//
#include "stdafx.h"
#include "CyApp.h"
#include "CySignalDialog.h"
#include "CyGrabber.h"
#include "CyAcquisitionPage.h"
#include "resource.hm"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CySignalDialog dialog
CySignalDialog::CySignalDialog( CWnd* pParent,
CyAcquisitionPage& aOwner )
: CDialog(CySignalDialog::IDD, pParent)
, mGrabber( reinterpret_cast( AfxGetApp() )->GetGrabber() )
, mOwner( aOwner )
{
//{{AFX_DATA_INIT(CySignalDialog)
//}}AFX_DATA_INIT
}
void CySignalDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CySignalDialog)
DDX_Control(pDX, IDC_GRANULARITY_TEXT, mGranularityText);
DDX_Control(pDX, IDC_GRANULARITY_SLIDER, mGranularitySlider);
DDX_Control(pDX, IDC_DELAY_TEXT, mDelayText);
DDX_Control(pDX, IDC_DELAY_SLIDER, mDelaySlider);
DDX_Control(pDX, IDC_WIDTH_TEXT, mWidthText);
DDX_Control(pDX, IDC_WIDTH_SLIDER, mWidthSlider);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CySignalDialog, CDialog)
//{{AFX_MSG_MAP(CySignalDialog)
ON_WM_HELPINFO()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_DELAY_SLIDER, OnReleasedcaptureSlider)
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_WIDTH_SLIDER, OnReleasedcaptureSlider)
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_GRANULARITY_SLIDER, OnReleasedcaptureSlider)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CySignalDialog message handlers
void CySignalDialog::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
unsigned long lWidth = mWidthSlider.GetPos();
unsigned long lDelay = mDelaySlider.GetPos();
unsigned long lGranularity = mGranularitySlider.GetPos();
mGrabber.GetDevice().SetPulseGenerator( 0,
(unsigned short)lDelay,
(unsigned short)lWidth,
(unsigned char)( lGranularity - 1 ),
mPeriodic,
mTrigger );
UpdateText();
*pResult = 0;
}
BOOL CySignalDialog::OnInitDialog()
{
CDialog::OnInitDialog();
DWORD lExStyle = GetExStyle();
lExStyle &= !WS_EX_APPWINDOW;
ModifyStyleEx( 0, lExStyle );
unsigned short lDelay, lWidth;
unsigned char lGranularity;
mGrabber.GetDevice().GetPulseGenerator( 0,
lDelay,
lWidth,
lGranularity,
mPeriodic,
mTrigger );
mDelaySlider.SetRange( 1, 65535 );
mDelaySlider.SetPos( lDelay );
mWidthSlider.SetRange( 1, 65535 );
mWidthSlider.SetPos( lWidth );
mGranularitySlider.SetRange( 1, 256 );
mGranularitySlider.SetPos( lGranularity + 1 );
UpdateText();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
static void FormatInteger( unsigned long aValue, CString& aResult )
{
aResult = "";
CString lTemp;
while ( aValue / 1000 )
{
unsigned long aCurrent = aValue % 1000;
if ( aResult.GetLength() > 0 )
{
lTemp.Format( "%03u,", aCurrent );
}
else
{
lTemp.Format( "%03u", aCurrent );
}
aResult.Insert( 0, lTemp );
// go to the next level
aValue /= 1000;
}
// we are left with the last
if ( aResult.GetLength() > 0 )
{
lTemp.Format( "%u,", aValue );
}
else
{
lTemp.Format( "%u", aValue );
}
aResult.Insert( 0, lTemp );
}
void CySignalDialog::UpdateText()
{
CString lTemp, lValue;
unsigned short lUShort1, lUShort2;
unsigned char lUChar;
mGrabber.GetDevice().GetPulseGenerator( 0,
lUShort1,
lUShort2,
lUChar,
mPeriodic,
mTrigger );
// Convert to nanoseconds for convenience
unsigned long lDelay, lWidth, lGranularity;
lGranularity = lUChar + 1;
lGranularity *= 30;
lDelay = lUShort1;
lDelay *= lGranularity;
lWidth = lUShort2;
lWidth *= lGranularity;
FormatInteger( lDelay, lValue );
lTemp.Format( "%s nanoseconds", (LPCTSTR)lValue );
mDelayText.SetWindowText( lTemp );
FormatInteger( lWidth, lValue );
lTemp.Format( "%s nanoseconds", lValue );
mWidthText.SetWindowText( lTemp );
FormatInteger( lGranularity, lValue );
lTemp.Format( "Number of PCI clock cycles (30 ns) = %s ns", lValue );
mGranularityText.SetWindowText( lTemp );
}
static DWORD rgmapCHID[] =
{
IDC_DELAY_SLIDER, HIDC_DELAY_SLIDER,
IDC_WIDTH_SLIDER, HIDC_WIDTH_SLIDER,
IDC_GRANULARITY_SLIDER, HIDC_GRANULARITY_SLIDER,
IDC_DELAY_TEXT, HIDC_DELAY_SLIDER,
IDC_WIDTH_TEXT, HIDC_WIDTH_SLIDER,
IDC_GRANULARITY_TEXT, HIDC_GRANULARITY_SLIDER,
0,0
};
BOOL CySignalDialog::OnHelpInfo(HELPINFO* pHelpInfo)
{
return ::WinHelp( (HWND)pHelpInfo->hItemHandle,
AfxGetApp()->m_pszHelpFilePath,
HELP_WM_HELP,
(DWORD)(LPVOID)rgmapCHID);
}
void CySignalDialog::OnClose()
{
mOwner.PostMessage( WM_COMMAND, IDC_SIGNALS_CLOSED );
CDialog::OnClose();
}