/* * $RCSfile: sample0Dlg.cpp,v $ * $Date: 2009/10/09 17:24:35 $ * $Revision: 1.6 $ * jEdit:collapseFolds=1:tabSize=4: * * class CSample0Dlg implementation */ #include "stdafx.h" #include "sample0.h" #include "sample0Dlg.h" #include "DetectDialog.h" #include "AIOUSB.h" BEGIN_MESSAGE_MAP(CSample0Dlg, CDialog) //{{AFX_MSG_MAP(CSample0Dlg) ON_BN_CLICKED(IDC_AUT0_UPDATE_CHECK, OnAutoUpdateCheck) ON_BN_CLICKED(IDC_UPDATE_BUTTON, OnUpdateButton) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER0, OnReleasedcaptureSlider0) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP() CSample0Dlg::CSample0Dlg( unsigned long deviceIndex, unsigned productID, CWnd *pParent /* = NULL */ ) : CDialog( CSample0Dlg::IDD, pParent ) { this->deviceIndex = deviceIndex; this->productID = productID; //{{AFX_DATA_INIT(CSample0Dlg) m_label0 = _T(""); m_label1 = _T(""); m_autoUpdate = FALSE; //}}AFX_DATA_INIT m_hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); } // CSample0Dlg::CSample0Dlg() void CSample0Dlg::DoDataExchange( CDataExchange *pDX ) { CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CSample0Dlg) DDX_Check(pDX, IDC_AUT0_UPDATE_CHECK, m_autoUpdate); DDX_Control(pDX, IDC_SLIDER0, m_slider0); DDX_Control(pDX, IDC_SLIDER1, m_slider1); DDX_Control(pDX, IDC_UPDATE_BUTTON, m_UpdateButton); DDX_Text(pDX, IDC_LABEL0, m_label0); DDX_Text(pDX, IDC_LABEL1, m_label1); //}}AFX_DATA_MAP } // CSample0Dlg::DoDataExchange() BOOL CSample0Dlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon( m_hIcon, TRUE ); SetIcon( m_hIcon, FALSE ); sliders[0] = &m_slider0; sliders[1] = &m_slider1; labels[0] = &m_label0; labels[1] = &m_label1; m_autoUpdate = TRUE; DACDirect(deviceIndex, 0, 0); DACDirect(deviceIndex, 1, 0); DACSetBoardRange(deviceIndex, 0); /* * we use the same D/A count range for both the 12-bit and 16-bit D/As; * the reason we can do so is that the 12-bit D/As automatically truncate * the LS 4 bits from the count value; so the count range for the 16-bit * D/As is 0-0xffff, while that for the 12-bit D/As is 0-0xfff0 */ const unsigned INITIAL_COUNTS = 0; const unsigned MAX_COUNTS = 0xffff; bool dacError = false; for( int channel = 0; channel < MAX_CHANNELS; channel++ ) { sliders[ channel ]->SetRange( 0, MAX_COUNTS, FALSE ); sliders[ channel ]->SetPos( INITIAL_COUNTS ); //sliders[ channel ]->EnableWindow( channel < numDACs ); labels[ channel ]->Format( "%04X", INITIAL_COUNTS ); if( DACDirect( deviceIndex, channel, INITIAL_COUNTS ) != ERROR_SUCCESS ) dacError = true ; } // for( int channel ... if( dacError ) MessageBox( "Error initializing DACs", "Error", MB_ICONERROR ); UpdateData( FALSE ); UpdateControls(); /* * get the device name and update dialog title to reflect actual device name */ const int MAX_NAME_SIZE = 256; char name[ MAX_NAME_SIZE + 2 ]; unsigned long nameSize = MAX_NAME_SIZE; const unsigned long result = QueryDeviceInfo( deviceIndex, NULL, &nameSize, name, NULL, NULL ); if( result == ERROR_SUCCESS ) { name[ nameSize ] = 0; CString dialogTitle; dialogTitle.Format( "%s Sample Program" ); SetWindowText( dialogTitle ); } else MessageBox( "Error querying device information", "Error", MB_ICONERROR ); return TRUE; } // CSample0Dlg::OnInitDialog() void CSample0Dlg::UpdateControls() { m_UpdateButton.EnableWindow( ! m_autoUpdate ); } // CSample0Dlg::UpdateControls() void CSample0Dlg::OnPaint() { if( IsIconic() ) { CPaintDC dc( this ); SendMessage( WM_ICONERASEBKGND, ( WPARAM ) dc.GetSafeHdc(), 0 ); // center icon in client rectangle int cxIcon = GetSystemMetrics( SM_CXICON ); int cyIcon = GetSystemMetrics( SM_CYICON ); CRect rect; GetClientRect( &rect ); int x = ( rect.Width() - cxIcon + 1 ) / 2; int y = ( rect.Height() - cyIcon + 1 ) / 2; // draw the icon dc.DrawIcon( x, y, m_hIcon ); } else { CDialog::OnPaint(); } // if( IsIconic() ) } // CSample0Dlg::OnPaint() HCURSOR CSample0Dlg::OnQueryDragIcon() { return ( HCURSOR ) m_hIcon; } // CSample0Dlg::OnQueryDragIcon() void CSample0Dlg::UpdateSlider( int channel ) { if( channel < MAX_CHANNELS ) { const unsigned counts = sliders[ channel ]->GetPos(); labels[ channel ]->Format( "%04X", counts ); UpdateData( FALSE ); if( m_autoUpdate ) { if( DACDirect( deviceIndex, channel, counts ) != ERROR_SUCCESS ) MessageBox( "Error setting DACs", "Error", MB_ICONERROR ); } // if( m_autoUpdate ) } // if( channel ... } // CSample0Dlg::UpdateSlider() void CSample0Dlg::OnReleasedcaptureSlider0( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 0 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider0() void CSample0Dlg::OnReleasedcaptureSlider1( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 1 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider1() void CSample0Dlg::OnAutoUpdateCheck() { UpdateData( TRUE ); UpdateControls(); OnUpdateButton(); } // CSample0Dlg::OnAutoUpdateCheck() void CSample0Dlg::OnUpdateButton() { /* * demonstrate DACMultiDirect() function */ unsigned short dacData[ MAX_CHANNELS * 2 ]; // channel/count pairs for( int channel = 0; channel < MAX_CHANNELS; channel++ ) { dacData[ channel * 2 ] = channel; // channel dacData[ channel * 2 + 1 ] = sliders[ channel ]->GetPos(); // counts } // for( int channel ... if( DACMultiDirect( deviceIndex, dacData, MAX_CHANNELS ) != ERROR_SUCCESS ) MessageBox( "Error updating all DACs", "Error", MB_ICONERROR ); } // CSample0Dlg::OnUpdateButton() /* end of file */