1 /*---------------------------------------------------------------------------*
2 Project: HIO2 demos - dual
3 File: dualView.cpp
4
5 (C)2005 HUDSON SOFT
6
7 $Header: /home/cvsroot/SDK/build/demos/hio2demo/vc++/dual/dualView.cpp,v 1.3 2006/03/15 06:31:26 mitu Exp $
8
9 $NoKeywords: $
10 *---------------------------------------------------------------------------*/
11
12 // dualView.cpp : implementation of the CDualView class
13 //
14
15 #include "stdafx.h"
16 #include "dual.h"
17
18 #include "dualDoc.h"
19 #include "dualView.h"
20 #include ".\dualview.h"
21
22 #ifdef _DEBUG
23 #define new DEBUG_NEW
24 #endif
25
26
27 // CDualView
28
IMPLEMENT_DYNCREATE(CDualView,CFormView)29 IMPLEMENT_DYNCREATE(CDualView, CFormView)
30
31 BEGIN_MESSAGE_MAP(CDualView, CFormView)
32 ON_MESSAGE(WM_USER, OnMyMessage) ////////// for dualApp //////////
33 ON_BN_CLICKED(IDC_BTN_CONNECT, OnBnClickedBtnConnect)
34 ON_BN_CLICKED(IDC_BTN_DISCONNECT, OnBnClickedBtnDisconnect)
35 ON_BN_CLICKED(IDC_BTN_EXIT, OnBnClickedBtnExit)
36 ON_BN_CLICKED(IDC_RADIO_SYNC, OnBnClickedRadioSync)
37 ON_BN_CLICKED(IDC_RADIO_ASYNC, OnBnClickedRadioAsync)
38 ON_WM_HSCROLL()
39 END_MESSAGE_MAP()
40
41 // CDualView construction/destruction
42
43 CDualView::CDualView()
44 : CFormView(CDualView::IDD)
45 {
46 // TODO: add construction code here
47
48 }
49
~CDualView()50 CDualView::~CDualView()
51 {
52 }
53
DoDataExchange(CDataExchange * pDX)54 void CDualView::DoDataExchange(CDataExchange* pDX)
55 {
56 CFormView::DoDataExchange(pDX);
57 DDX_Control(pDX, IDC_SLIDER_RED, m_cSliderRed);
58 DDX_Control(pDX, IDC_SLIDER_GREEN, m_cSliderGreen);
59 DDX_Control(pDX, IDC_SLIDER_BLUE, m_cSliderBlue);
60 }
61
PreCreateWindow(CREATESTRUCT & cs)62 BOOL CDualView::PreCreateWindow(CREATESTRUCT& cs)
63 {
64 // TODO: Modify the Window class or styles here by modifying
65 // the CREATESTRUCT cs
66
67 return CFormView::PreCreateWindow(cs);
68 }
69
OnInitialUpdate()70 void CDualView::OnInitialUpdate()
71 {
72 CFormView::OnInitialUpdate();
73 GetParentFrame()->RecalcLayout();
74 ResizeParentToFit();
75
76 ////////// for dualApp //////////
77
78 // RGB buffer initialization
79 ZeroMemory(&m_stRGB, sizeof(m_stRGB));
80
81 // set the range of the slider bar
82 m_cSliderRed.SetRange(0, 255);
83 m_cSliderGreen.SetRange(0, 255);
84 m_cSliderBlue.SetRange(0, 255);
85
86 // radio button default setting ("SYNC")
87 CheckRadioButton(IDC_RADIO_SYNC, IDC_RADIO_ASYNC, IDC_RADIO_SYNC);
88 }
89
90
91 // CDualView diagnostics
92
93 #ifdef _DEBUG
AssertValid() const94 void CDualView::AssertValid() const
95 {
96 CFormView::AssertValid();
97 }
98
Dump(CDumpContext & dc) const99 void CDualView::Dump(CDumpContext& dc) const
100 {
101 CFormView::Dump(dc);
102 }
103
GetDocument() const104 CDualDoc* CDualView::GetDocument() const // non-debug version is inline
105 {
106 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDualDoc)));
107 return (CDualDoc*)m_pDocument;
108 }
109 #endif //_DEBUG
110
111 ////////// for dualApp //////////
OnMyMessage(WPARAM wParam,LPARAM lParam)112 LRESULT CDualView::OnMyMessage(WPARAM wParam, LPARAM lParam)
113 {
114 switch ( wParam )
115 {
116 case EVENT_SET_SEND_STATUS:
117 GetDlgItem(IDC_SEND_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_SEND));
118 // change the state of the CONNECT/DISCONNECT button
119 if ( lParam == EVENT_CONNECT )
120 {
121 GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
122 GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
123 }
124 else if ( lParam == EVENT_DISCONNECT )
125 {
126 GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(TRUE);
127 GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(FALSE);
128 }
129 // called once when else is launched (CDoublwApp->InitInstance)
130 break;
131 case EVENT_SET_RECV_STATUS:
132 GetDlgItem(IDC_RECV_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_RECV));
133 break;
134 case EVENT_VALID_RECV_COLOR:
135 GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(TRUE);
136 break;
137 case EVENT_INVALID_RECV_COLOR:
138 GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(FALSE);
139 break;
140 case EVENT_UPDATE_COLOR:
141 {
142 CString cTmp;
143 cTmp.Format("RECV R:%02X G:%02X B:%02X",
144 GetRValue(lParam), GetGValue(lParam), GetBValue(lParam));
145 SetDlgItemText(IDC_STATIC_RECV_RGB, (LPCSTR)cTmp);
146 }
147 break;
148 }
149
150 return 0;
151 }
152
153
154 ////////// for dualApp //////////
155
156 // CDualView message handlers
157
OnBnClickedBtnConnect()158 void CDualView::OnBnClickedBtnConnect()
159 {
160 // changes the state of the CONNECT/DISCONNECT button and initialize the slider bar
161 GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
162 GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
163 m_cSliderRed.SetPos(0);
164 m_cSliderGreen.SetPos(0);
165 m_cSliderBlue.SetPos(0);
166 SetDlgItemText(IDC_STATIC_RECV_RGB, "RECV R:00 G:00 B:00");
167
168 GetApp()->HioIfInit();
169 }
170
OnBnClickedBtnDisconnect()171 void CDualView::OnBnClickedBtnDisconnect()
172 {
173 GetApp()->m_pHioIf->EnterCriticalSection();
174
175 GetApp()->Disconnect(GetApp()->m_nRecvID);
176 GetApp()->Disconnect(GetApp()->m_nSendID);
177
178 GetApp()->m_pHioIf->LeaveCriticalSection();
179 }
180
OnBnClickedBtnExit()181 void CDualView::OnBnClickedBtnExit()
182 {
183 GetParentFrame()->PostMessage(WM_CLOSE);
184 }
185
OnBnClickedRadioSync()186 void CDualView::OnBnClickedRadioSync()
187 {
188 GetApp()->m_bSync = FALSE;
189 }
190
OnBnClickedRadioAsync()191 void CDualView::OnBnClickedRadioAsync()
192 {
193 GetApp()->m_bSync = TRUE;
194 }
195
OnHScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)196 void CDualView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
197 {
198 // reflect the results of the slider bar in the window and send to NNGC
199 switch(nSBCode){
200 case SB_PAGELEFT:
201 case SB_PAGERIGHT:
202 case SB_LINELEFT:
203 case SB_LINERIGHT:
204 case SB_LEFT:
205 case SB_RIGHT:
206 {
207 CSliderCtrl *pSlider = (CSliderCtrl*)pScrollBar;
208 nPos = pSlider->GetPos();
209 }
210 case SB_THUMBPOSITION:
211 case SB_THUMBTRACK:
212 {
213 // display communications status in the status bar
214 DWORD dwRecvStat = 0, dwSendStat = 0;
215 CString cTmp;
216
217 GetAppHioIf()->ReadStatus(GetApp()->m_nRecvID, dwRecvStat);
218 GetAppHioIf()->ReadStatus(GetApp()->m_nSendID, dwSendStat);
219 cTmp.Format("R:%04X S:%04X",dwRecvStat, dwSendStat);
220 GetParentFrame()->SetMessageText((LPCSTR)cTmp);
221
222 // update the converted color that was changed via the slider bar
223 if( pScrollBar == (CScrollBar *)(&m_cSliderRed) )
224 {
225 m_stRGB.rgbRed = nPos;
226 }
227 else if( pScrollBar == (CScrollBar *)(&m_cSliderGreen) )
228 {
229 m_stRGB.rgbGreen = nPos;
230 }
231 else if( pScrollBar == (CScrollBar *)(&m_cSliderBlue) )
232 {
233 m_stRGB.rgbBlue = nPos;
234 }
235
236 // send the color data to NNGC
237 HIO2IF_RESULT result = GetApp()->SendRGB(&m_stRGB);
238 if ( HIO2IF_FAILED(result) )
239 {
240 MessageBox("Send Error", "ERROR", (MB_OK | MB_ICONWARNING));
241 break;
242 }
243 #if 0
244 // communications failure (not yet in the send possible state, etc.)
245 if ( !HIO2IF_SUCCESS(result) )
246 {
247 GetParentFrame()->SetMessageText(
248 (GetAppHioIf()->GetLastError() == HIO2IF_ERROR_CANNOT_SEND_DATA)
249 ? AFX_IDS_BUSYMESSAGE : AFX_IDS_NOTCMESSAGE);
250 }
251 else
252 GetParentFrame()->SetMessageText(AFX_IDS_IDLEMESSAGE);
253 #endif
254 }
255 break;
256 case SB_ENDSCROLL:
257 default:
258 break;
259 }
260
261 CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
262 }
263
OnDraw(CDC *)264 void CDualView::OnDraw(CDC* /*pDC*/)
265 {
266 // case when NNGC launched earlier
267 if ( (GetApp()->m_nSendID != HIO2IF_INVALID_ID)
268 && (GetAppHioIf()->IsConnected(GetApp()->m_nSendID)) )
269 {
270 GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
271 GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
272 }
273 }
274