/*---------------------------------------------------------------------------* Project: HIO2 demos - dual File: dualView.cpp (C)2005 HUDSON SOFT $Header: /home/cvsroot/SDK/build/demos/hio2demo/vc++/dual/dualView.cpp,v 1.3 2006/03/15 06:31:26 mitu Exp $ $NoKeywords: $ *---------------------------------------------------------------------------*/ // dualView.cpp : implementation of the CDualView class // #include "stdafx.h" #include "dual.h" #include "dualDoc.h" #include "dualView.h" #include ".\dualview.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CDualView IMPLEMENT_DYNCREATE(CDualView, CFormView) BEGIN_MESSAGE_MAP(CDualView, CFormView) ON_MESSAGE(WM_USER, OnMyMessage) ////////// for dualApp ////////// ON_BN_CLICKED(IDC_BTN_CONNECT, OnBnClickedBtnConnect) ON_BN_CLICKED(IDC_BTN_DISCONNECT, OnBnClickedBtnDisconnect) ON_BN_CLICKED(IDC_BTN_EXIT, OnBnClickedBtnExit) ON_BN_CLICKED(IDC_RADIO_SYNC, OnBnClickedRadioSync) ON_BN_CLICKED(IDC_RADIO_ASYNC, OnBnClickedRadioAsync) ON_WM_HSCROLL() END_MESSAGE_MAP() // CDualView construction/destruction CDualView::CDualView() : CFormView(CDualView::IDD) { // TODO: add construction code here } CDualView::~CDualView() { } void CDualView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_SLIDER_RED, m_cSliderRed); DDX_Control(pDX, IDC_SLIDER_GREEN, m_cSliderGreen); DDX_Control(pDX, IDC_SLIDER_BLUE, m_cSliderBlue); } BOOL CDualView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow(cs); } void CDualView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); ////////// for dualApp ////////// // RGB buffer initialization ZeroMemory(&m_stRGB, sizeof(m_stRGB)); // set the range of the slider bar m_cSliderRed.SetRange(0, 255); m_cSliderGreen.SetRange(0, 255); m_cSliderBlue.SetRange(0, 255); // radio button default setting ("SYNC") CheckRadioButton(IDC_RADIO_SYNC, IDC_RADIO_ASYNC, IDC_RADIO_SYNC); } // CDualView diagnostics #ifdef _DEBUG void CDualView::AssertValid() const { CFormView::AssertValid(); } void CDualView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CDualDoc* CDualView::GetDocument() const // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDualDoc))); return (CDualDoc*)m_pDocument; } #endif //_DEBUG ////////// for dualApp ////////// LRESULT CDualView::OnMyMessage(WPARAM wParam, LPARAM lParam) { switch ( wParam ) { case EVENT_SET_SEND_STATUS: GetDlgItem(IDC_SEND_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_SEND)); // change the state of the CONNECT/DISCONNECT button if ( lParam == EVENT_CONNECT ) { GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE); } else if ( lParam == EVENT_DISCONNECT ) { GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(FALSE); } // called once when else is launched (CDoublwApp->InitInstance) break; case EVENT_SET_RECV_STATUS: GetDlgItem(IDC_RECV_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_RECV)); break; case EVENT_VALID_RECV_COLOR: GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(TRUE); break; case EVENT_INVALID_RECV_COLOR: GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(FALSE); break; case EVENT_UPDATE_COLOR: { CString cTmp; cTmp.Format("RECV R:%02X G:%02X B:%02X", GetRValue(lParam), GetGValue(lParam), GetBValue(lParam)); SetDlgItemText(IDC_STATIC_RECV_RGB, (LPCSTR)cTmp); } break; } return 0; } ////////// for dualApp ////////// // CDualView message handlers void CDualView::OnBnClickedBtnConnect() { // changes the state of the CONNECT/DISCONNECT button and initialize the slider bar GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE); m_cSliderRed.SetPos(0); m_cSliderGreen.SetPos(0); m_cSliderBlue.SetPos(0); SetDlgItemText(IDC_STATIC_RECV_RGB, "RECV R:00 G:00 B:00"); GetApp()->HioIfInit(); } void CDualView::OnBnClickedBtnDisconnect() { GetApp()->m_pHioIf->EnterCriticalSection(); GetApp()->Disconnect(GetApp()->m_nRecvID); GetApp()->Disconnect(GetApp()->m_nSendID); GetApp()->m_pHioIf->LeaveCriticalSection(); } void CDualView::OnBnClickedBtnExit() { GetParentFrame()->PostMessage(WM_CLOSE); } void CDualView::OnBnClickedRadioSync() { GetApp()->m_bSync = FALSE; } void CDualView::OnBnClickedRadioAsync() { GetApp()->m_bSync = TRUE; } void CDualView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // reflect the results of the slider bar in the window and send to NNGC switch(nSBCode){ case SB_PAGELEFT: case SB_PAGERIGHT: case SB_LINELEFT: case SB_LINERIGHT: case SB_LEFT: case SB_RIGHT: { CSliderCtrl *pSlider = (CSliderCtrl*)pScrollBar; nPos = pSlider->GetPos(); } case SB_THUMBPOSITION: case SB_THUMBTRACK: { // display communications status in the status bar DWORD dwRecvStat = 0, dwSendStat = 0; CString cTmp; GetAppHioIf()->ReadStatus(GetApp()->m_nRecvID, dwRecvStat); GetAppHioIf()->ReadStatus(GetApp()->m_nSendID, dwSendStat); cTmp.Format("R:%04X S:%04X",dwRecvStat, dwSendStat); GetParentFrame()->SetMessageText((LPCSTR)cTmp); // update the converted color that was changed via the slider bar if( pScrollBar == (CScrollBar *)(&m_cSliderRed) ) { m_stRGB.rgbRed = nPos; } else if( pScrollBar == (CScrollBar *)(&m_cSliderGreen) ) { m_stRGB.rgbGreen = nPos; } else if( pScrollBar == (CScrollBar *)(&m_cSliderBlue) ) { m_stRGB.rgbBlue = nPos; } // send the color data to NNGC HIO2IF_RESULT result = GetApp()->SendRGB(&m_stRGB); if ( HIO2IF_FAILED(result) ) { MessageBox("Send Error", "ERROR", (MB_OK | MB_ICONWARNING)); break; } #if 0 // communications failure (not yet in the send possible state, etc.) if ( !HIO2IF_SUCCESS(result) ) { GetParentFrame()->SetMessageText( (GetAppHioIf()->GetLastError() == HIO2IF_ERROR_CANNOT_SEND_DATA) ? AFX_IDS_BUSYMESSAGE : AFX_IDS_NOTCMESSAGE); } else GetParentFrame()->SetMessageText(AFX_IDS_IDLEMESSAGE); #endif } break; case SB_ENDSCROLL: default: break; } CFormView::OnHScroll(nSBCode, nPos, pScrollBar); } void CDualView::OnDraw(CDC* /*pDC*/) { // case when NNGC launched earlier if ( (GetApp()->m_nSendID != HIO2IF_INVALID_ID) && (GetAppHioIf()->IsConnected(GetApp()->m_nSendID)) ) { GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE); } }