/* The Logitech Controls Assignment SDK, including all accompanying documentation, is protected by intellectual property laws. All rights not expressly granted by Logitech are reserved. */ // ControlsAssignmentSDKDemoDlg.cpp : implementation file // #include "stdafx.h" #include "ControlsAssignmentSDKDemo.h" #include "ControlsAssignmentSDKDemoDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CControlsAssignmentSDKDemoDlg dialog CControlsAssignmentSDKDemoDlg::CControlsAssignmentSDKDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CControlsAssignmentSDKDemoDlg::IDD, pParent) , m_bStrafeRev(FALSE) , m_bMoveRev(FALSE) , m_bTurnRev(FALSE) , m_Alt1Value(_T("")) , m_Alt2Value(_T("")) , m_Alt3Value(_T("")) , m_Alt4Value(_T("")) , m_Alt5Value(_T("")) , m_Alt6Value(_T("")) , m_Alt7Value(_T("")) , m_Alt8Value(_T("")) , m_Alt9Value(_T("")) , m_Norm1Value(0) , m_Norm2Value(0) , m_Norm3Value(0) , m_Norm4Value(0) , m_Norm5Value(0) , m_Norm6Value(0) , m_Norm7Value(0) , m_Norm8Value(0) , m_Norm9Value(0) , m_Comb1Value(0) , m_Comb2Value(0) , m_Comb3Value(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } CControlsAssignmentSDKDemoDlg::~CControlsAssignmentSDKDemoDlg() { if (NULL != m_LogiControllerInput) { delete m_LogiControllerInput; m_LogiControllerInput = NULL; } if (NULL != m_LogiControls) { delete m_LogiControls; m_LogiControls = NULL; } } void CControlsAssignmentSDKDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Check(pDX, IDC_REV1, m_bStrafeRev); DDX_Check(pDX, IDC_REV2, m_bMoveRev); DDX_Check(pDX, IDC_REV3, m_bTurnRev); DDX_Text(pDX, IDC_ALT1, m_Alt1Value); DDX_Text(pDX, IDC_ALT2, m_Alt2Value); DDX_Text(pDX, IDC_ALT3, m_Alt3Value); DDX_Text(pDX, IDC_ALT4, m_Alt4Value); DDX_Text(pDX, IDC_ALT5, m_Alt5Value); DDX_Text(pDX, IDC_ALT6, m_Alt6Value); DDX_Text(pDX, IDC_ALT7, m_Alt7Value); DDX_Text(pDX, IDC_ALT8, m_Alt8Value); DDX_Text(pDX, IDC_ALT9, m_Alt9Value); DDX_Text(pDX, IDC_NORM1, m_Norm1Value); DDX_Text(pDX, IDC_NORM2, m_Norm2Value); DDX_Text(pDX, IDC_NORM3, m_Norm3Value); DDX_Text(pDX, IDC_NORM4, m_Norm4Value); DDX_Text(pDX, IDC_NORM5, m_Norm5Value); DDX_Text(pDX, IDC_NORM6, m_Norm6Value); DDX_Text(pDX, IDC_NORM7, m_Norm7Value); DDX_Text(pDX, IDC_NORM8, m_Norm8Value); DDX_Text(pDX, IDC_NORM9, m_Norm9Value); DDX_Text(pDX, IDC_COMB1, m_Comb1Value); DDX_Text(pDX, IDC_COMB2, m_Comb2Value); DDX_Text(pDX, IDC_COMB3, m_Comb3Value); } BEGIN_MESSAGE_MAP(CControlsAssignmentSDKDemoDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_WM_TIMER() ON_EN_SETFOCUS(IDC_ALT1, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt1) ON_EN_SETFOCUS(IDC_ALT2, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt2) ON_EN_SETFOCUS(IDC_ALT3, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt3) ON_EN_SETFOCUS(IDC_ALT4, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt4) ON_EN_SETFOCUS(IDC_ALT5, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt5) ON_EN_SETFOCUS(IDC_ALT6, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt6) ON_EN_SETFOCUS(IDC_ALT7, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt7) ON_EN_SETFOCUS(IDC_ALT8, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt8) ON_EN_SETFOCUS(IDC_ALT9, &CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt9) ON_BN_CLICKED(IDC_STOPCHECKING, &CControlsAssignmentSDKDemoDlg::OnBnClickedStopchecking) ON_BN_CLICKED(IDC_SAVE, &CControlsAssignmentSDKDemoDlg::OnBnClickedSave) ON_BN_CLICKED(IDC_CLEARALL, &CControlsAssignmentSDKDemoDlg::OnBnClickedClearall) END_MESSAGE_MAP() // CControlsAssignmentSDKDemoDlg message handlers BOOL CControlsAssignmentSDKDemoDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_LogiControllerInput = new LogitechControllerInput::ControllerInput(m_hWnd); m_LogiControls = new LogitechControlsAssignmentSDK::ControlsAssignment(m_LogiControllerInput, LogitechControllerInput::LG_DINPUT_RANGE_MIN, LogitechControllerInput::LG_DINPUT_RANGE_MAX); m_CurrControl = LG_ZERO_ACTION; m_ControlFile.LoadFile( _T("DataFile.txt"), *m_LogiControls ); SetTimer(0xbada, 50, NULL); m_pCurrControlName = NULL; m_Alt1Value = m_LogiControls->GetControlName(LG_STRAFE_LEFT); m_Alt2Value = m_LogiControls->GetControlName(LG_STRAFE_RIGHT); m_Alt3Value = m_LogiControls->GetControlName(LG_MOVE_FORWARD); m_Alt4Value = m_LogiControls->GetControlName(LG_MOVE_BACKWARD); m_Alt5Value = m_LogiControls->GetControlName(LG_TURN_LEFT); m_Alt6Value = m_LogiControls->GetControlName(LG_TURN_RIGHT); m_Alt7Value = m_LogiControls->GetControlName(LG_FIRE); m_Alt8Value = m_LogiControls->GetControlName(LG_CHANGE_VIEW); m_Alt9Value = m_LogiControls->GetControlName(LG_ZOOM_MAP); UpdateData(FALSE); GetDlgItem(IDC_STOPCHECKING)->EnableWindow(FALSE); GetDlgItem(IDC_SAVE)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control } void CControlsAssignmentSDKDemoDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CControlsAssignmentSDKDemoDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CControlsAssignmentSDKDemoDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CControlsAssignmentSDKDemoDlg::OnOK() { CDialog::OnOK(); } void CControlsAssignmentSDKDemoDlg::OnCancel() { CDialog::OnCancel(); } void CControlsAssignmentSDKDemoDlg::OnTimer(UINT_PTR nIDEvent) { UpdateData(TRUE); m_LogiControllerInput->Update(); if (FAILED(m_LogiControls->Update())) { MessageBox( TEXT("Error doing Controls Assignment SDK Update"), TEXT("DirectInput Sample"), MB_ICONERROR | MB_OK ); } //No longer checking for input? if( m_CurrControl > LG_ZERO_ACTION && m_LogiControls->IsCheckingForInput(m_CurrControl) == FALSE ) { m_CurrControl = LG_ZERO_ACTION; GetDlgItem(IDC_STOPCHECKING)->EnableWindow(FALSE); GetDlgItem(IDC_SAVE)->EnableWindow(TRUE); m_Alt1Value = m_LogiControls->GetControlName(LG_STRAFE_LEFT); m_Alt2Value = m_LogiControls->GetControlName(LG_STRAFE_RIGHT); m_Alt3Value = m_LogiControls->GetControlName(LG_MOVE_FORWARD); m_Alt4Value = m_LogiControls->GetControlName(LG_MOVE_BACKWARD); m_Alt5Value = m_LogiControls->GetControlName(LG_TURN_LEFT); m_Alt6Value = m_LogiControls->GetControlName(LG_TURN_RIGHT); m_Alt7Value = m_LogiControls->GetControlName(LG_FIRE); m_Alt8Value = m_LogiControls->GetControlName(LG_CHANGE_VIEW); m_Alt9Value = m_LogiControls->GetControlName(LG_ZOOM_MAP); } //Update the display for the values m_Norm1Value = m_LogiControls->GetValue(LG_STRAFE_LEFT); m_Norm2Value = m_LogiControls->GetValue(LG_STRAFE_RIGHT); m_Norm3Value = m_LogiControls->GetValue(LG_MOVE_FORWARD); m_Norm4Value = m_LogiControls->GetValue(LG_MOVE_BACKWARD); m_Norm5Value = m_LogiControls->GetValue(LG_TURN_LEFT); m_Norm6Value = m_LogiControls->GetValue(LG_TURN_RIGHT); m_Norm7Value = m_LogiControls->GetValue(LG_FIRE); m_Norm8Value = m_LogiControls->GetValue(LG_CHANGE_VIEW); m_Norm9Value = m_LogiControls->GetValue(LG_ZOOM_MAP); m_Comb1Value = m_LogiControls->GetCombinedValue(LG_STRAFE_LEFT, LG_STRAFE_RIGHT, m_bStrafeRev); m_Comb2Value = m_LogiControls->GetCombinedValue(LG_MOVE_FORWARD, LG_MOVE_BACKWARD, m_bMoveRev); m_Comb3Value = m_LogiControls->GetCombinedValue(LG_TURN_LEFT, LG_TURN_RIGHT, m_bTurnRev); UpdateData(FALSE); CDialog::OnTimer(nIDEvent); } void CControlsAssignmentSDKDemoDlg::StartChecking(GameActionEnum action) { //If you are still checking for a previous input, stop it if( m_CurrControl > LG_ZERO_ACTION && m_LogiControls->IsCheckingForInput(m_CurrControl) ) { m_LogiControls->StopCheckingForInput(m_CurrControl); // Erase "Move a control on device to assign" if it is somewhere in another box m_Alt1Value = m_LogiControls->GetControlName(LG_STRAFE_LEFT); m_Alt2Value = m_LogiControls->GetControlName(LG_STRAFE_RIGHT); m_Alt3Value = m_LogiControls->GetControlName(LG_MOVE_FORWARD); m_Alt4Value = m_LogiControls->GetControlName(LG_MOVE_BACKWARD); m_Alt5Value = m_LogiControls->GetControlName(LG_TURN_LEFT); m_Alt6Value = m_LogiControls->GetControlName(LG_TURN_RIGHT); m_Alt7Value = m_LogiControls->GetControlName(LG_FIRE); m_Alt8Value = m_LogiControls->GetControlName(LG_CHANGE_VIEW); m_Alt9Value = m_LogiControls->GetControlName(LG_ZOOM_MAP); } //Assign a new action to look foor m_CurrControl = action; //Now start checking for it //(stops in OnTimer, or if cancelled) m_LogiControls->StartCheckingForInput(m_CurrControl); //Display some text to say what to do *m_pCurrControlName = _T("Move a control on device to assign"); UpdateData(FALSE); GetDlgItem(IDC_STOPCHECKING)->EnableWindow(TRUE); GetDlgItem(IDOK)->SetFocus(); } //Here is the set of 9 actions you can click on in the dialog's UI void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt1() { m_pCurrControlName = &m_Alt1Value; StartChecking(LG_STRAFE_LEFT); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt2() { m_pCurrControlName = &m_Alt2Value; StartChecking(LG_STRAFE_RIGHT); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt3() { m_pCurrControlName = &m_Alt3Value; StartChecking(LG_MOVE_FORWARD); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt4() { m_pCurrControlName = &m_Alt4Value; StartChecking(LG_MOVE_BACKWARD); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt5() { m_pCurrControlName = &m_Alt5Value; StartChecking(LG_TURN_LEFT); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt6() { m_pCurrControlName = &m_Alt6Value; StartChecking(LG_TURN_RIGHT); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt7() { m_pCurrControlName = &m_Alt7Value; StartChecking(LG_FIRE); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt8() { m_pCurrControlName = &m_Alt8Value; StartChecking(LG_CHANGE_VIEW); } void CControlsAssignmentSDKDemoDlg::OnEnSetfocusAlt9() { m_pCurrControlName = &m_Alt9Value; StartChecking(LG_ZOOM_MAP); } void CControlsAssignmentSDKDemoDlg::OnBnClickedStopchecking() { //If you are still checking for a previous input, stop it if( m_CurrControl > LG_ZERO_ACTION && m_LogiControls->IsCheckingForInput(m_CurrControl) ) { m_LogiControls->StopCheckingForInput(m_CurrControl); m_Alt1Value = m_LogiControls->GetControlName(LG_STRAFE_LEFT); m_Alt2Value = m_LogiControls->GetControlName(LG_STRAFE_RIGHT); m_Alt3Value = m_LogiControls->GetControlName(LG_MOVE_FORWARD); m_Alt4Value = m_LogiControls->GetControlName(LG_MOVE_BACKWARD); m_Alt5Value = m_LogiControls->GetControlName(LG_TURN_LEFT); m_Alt6Value = m_LogiControls->GetControlName(LG_TURN_RIGHT); m_Alt7Value = m_LogiControls->GetControlName(LG_FIRE); m_Alt8Value = m_LogiControls->GetControlName(LG_CHANGE_VIEW); m_Alt9Value = m_LogiControls->GetControlName(LG_ZOOM_MAP); } m_CurrControl = LG_ZERO_ACTION; UpdateData(FALSE); } void CControlsAssignmentSDKDemoDlg::OnBnClickedSave() { m_ControlFile.SaveFile( _T("DataFile.txt"), *m_LogiControls ); GetDlgItem(IDC_SAVE)->EnableWindow(FALSE); } void CControlsAssignmentSDKDemoDlg::OnBnClickedClearall() { for( INT a = LG_ZERO_ACTION; a < LG_NUMBER_GAME_ACTIONS; ++a ) { m_LogiControls->Reset(a); } m_Alt1Value.Empty(); m_Alt2Value.Empty(); m_Alt3Value.Empty(); m_Alt4Value.Empty(); m_Alt5Value.Empty(); m_Alt6Value.Empty(); m_Alt7Value.Empty(); m_Alt8Value.Empty(); m_Alt9Value.Empty(); m_Norm1Value = 0.0f; m_Norm2Value = 0.0f; m_Norm3Value = 0.0f; m_Norm4Value = 0.0f; m_Norm5Value = 0.0f; m_Norm6Value = 0.0f; m_Norm7Value = 0.0f; m_Norm8Value = 0.0f; m_Norm9Value = 0.0f; m_Comb1Value = 0.0f; m_Comb2Value = 0.0f; m_Comb3Value = 0.0f; m_bStrafeRev = FALSE; m_bMoveRev = FALSE; m_bTurnRev = FALSE; GetDlgItem(IDC_STOPCHECKING)->EnableWindow(FALSE); GetDlgItem(IDC_SAVE)->EnableWindow(TRUE); UpdateData(FALSE); }