DAC_VCDEMODlg.cpp
上传用户:fuyouda
上传日期:2015-08-19
资源大小:6876k
文件大小:12k
源码类别:

家庭/个人应用

开发平台:

Visual C++

  1. // DAC_VCDEMODlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "DAC_VCDEMO.h"
  5. #include "DAC_VCDEMODlg.h"
  6. #include "DACLTSDK.h"
  7. #include "ServerBrowserDlg.h"
  8. #include "ServerStatusDlg.h"
  9. #include "GroupStatusDlg.h"
  10. #include "ItemBrowserDlg.h"
  11. #include "ItemStatusDlg.h"
  12. #include "ItemActiveDlg.h"
  13. #include "ItemWriteDlg.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. void WINAPI ShutdownProc(DWORD hServer)
  20. {
  21. CDAC_VCDEMODlg *pWnd;
  22. pWnd = (CDAC_VCDEMODlg *)AfxGetMainWnd();
  23. pWnd->ShutDown(hServer);
  24. }
  25. void WINAPI DataChangeProc(DWORD hServer, DWORD hGroup, DWORD hItem, VARIANT pVar, _FILETIME timestamp, WORD quality)
  26. {
  27. CDAC_VCDEMODlg *pWnd;
  28. pWnd = (CDAC_VCDEMODlg *)AfxGetMainWnd();
  29. pWnd->Refresh(hItem, pVar, quality, timestamp);
  30. }
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CAboutDlg dialog used for App About
  33. class CAboutDlg : public CDialog
  34. {
  35. public:
  36. CAboutDlg();
  37. // Dialog Data
  38. //{{AFX_DATA(CAboutDlg)
  39. enum { IDD = IDD_ABOUTBOX };
  40. //}}AFX_DATA
  41. // ClassWizard generated virtual function overrides
  42. //{{AFX_VIRTUAL(CAboutDlg)
  43. protected:
  44. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  45. //}}AFX_VIRTUAL
  46. // Implementation
  47. protected:
  48. //{{AFX_MSG(CAboutDlg)
  49. //}}AFX_MSG
  50. DECLARE_MESSAGE_MAP()
  51. };
  52. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  53. {
  54. //{{AFX_DATA_INIT(CAboutDlg)
  55. //}}AFX_DATA_INIT
  56. }
  57. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  58. {
  59. CDialog::DoDataExchange(pDX);
  60. //{{AFX_DATA_MAP(CAboutDlg)
  61. //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  64. //{{AFX_MSG_MAP(CAboutDlg)
  65. // No message handlers
  66. //}}AFX_MSG_MAP
  67. END_MESSAGE_MAP()
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CDAC_VCDEMODlg dialog
  70. CDAC_VCDEMODlg::CDAC_VCDEMODlg(CWnd* pParent /*=NULL*/)
  71. : CDialog(CDAC_VCDEMODlg::IDD, pParent)
  72. {
  73. //{{AFX_DATA_INIT(CDAC_VCDEMODlg)
  74. //}}AFX_DATA_INIT
  75. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  76. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  77. }
  78. void CDAC_VCDEMODlg::DoDataExchange(CDataExchange* pDX)
  79. {
  80. CDialog::DoDataExchange(pDX);
  81. //{{AFX_DATA_MAP(CDAC_VCDEMODlg)
  82. DDX_Control(pDX, IDC_LIST, m_List);
  83. //}}AFX_DATA_MAP
  84. }
  85. BEGIN_MESSAGE_MAP(CDAC_VCDEMODlg, CDialog)
  86. //{{AFX_MSG_MAP(CDAC_VCDEMODlg)
  87. ON_WM_SYSCOMMAND()
  88. ON_WM_PAINT()
  89. ON_WM_QUERYDRAGICON()
  90. ON_COMMAND(ID_MENUExit, OnMENUExit)
  91. ON_COMMAND(ID_MENUAbout, OnMENUAbout)
  92. ON_COMMAND(ID_MENUConnect, OnMENUConnect)
  93. ON_COMMAND(ID_MENUDisconnect, OnMENUDisconnect)
  94. ON_COMMAND(ID_MENUGroupRefresh, OnMENUGroupRefresh)
  95. ON_COMMAND(ID_MENUGroupStatus, OnMENUGroupStatus)
  96. ON_COMMAND(ID_MENUItemAdd, OnMENUItemAdd)
  97. ON_COMMAND(ID_MENUItemStatus, OnMENUITEMProperties)
  98. ON_COMMAND(ID_MENUItemRead, OnMENUITEMRead)
  99. ON_COMMAND(ID_MENUItemRemove, OnMENUITEMRemove)
  100. ON_COMMAND(ID_MENUItemWrite, OnMENUITEMWrite)
  101. ON_COMMAND(ID_MENUServerStatus, OnMENUServerStatus)
  102. ON_WM_CREATE()
  103. ON_WM_DESTROY()
  104. ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemchanged)
  105. ON_COMMAND(ID_MENUItemActive, OnMENUItemActive)
  106. ON_WM_SHOWWINDOW()
  107. //}}AFX_MSG_MAP
  108. END_MESSAGE_MAP()
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CDAC_VCDEMODlg message handlers
  111. BOOL CDAC_VCDEMODlg::OnInitDialog()
  112. {
  113. CDialog::OnInitDialog();
  114. // Set the icon for this dialog.  The framework does this automatically
  115. //  when the application's main window is not a dialog
  116. SetIcon(m_hIcon, TRUE); // Set big icon
  117. SetIcon(m_hIcon, FALSE); // Set small icon
  118. m_List.InsertColumn(0,"Name",LVCFMT_LEFT,200,-1);
  119. m_List.InsertColumn(1,"Value",LVCFMT_LEFT,120,-1);
  120. m_List.InsertColumn(2,"Quality",LVCFMT_LEFT,80,-1);
  121. m_List.InsertColumn(3,"TimeStamp",LVCFMT_LEFT,200,-1);
  122. return TRUE;  // return TRUE  unless you set the focus to a control
  123. }
  124. void CDAC_VCDEMODlg::OnSysCommand(UINT nID, LPARAM lParam)
  125. {
  126. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  127. {
  128. CAboutDlg dlgAbout;
  129. dlgAbout.DoModal();
  130. }
  131. else
  132. {
  133. CDialog::OnSysCommand(nID, lParam);
  134. }
  135. }
  136. // If you add a minimize button to your dialog, you will need the code below
  137. //  to draw the icon.  For MFC applications using the document/view model,
  138. //  this is automatically done for you by the framework.
  139. void CDAC_VCDEMODlg::OnPaint() 
  140. {
  141. if (IsIconic())
  142. {
  143. CPaintDC dc(this); // device context for painting
  144. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  145. // Center icon in client rectangle
  146. int cxIcon = GetSystemMetrics(SM_CXICON);
  147. int cyIcon = GetSystemMetrics(SM_CYICON);
  148. CRect rect;
  149. GetClientRect(&rect);
  150. int x = (rect.Width() - cxIcon + 1) / 2;
  151. int y = (rect.Height() - cyIcon + 1) / 2;
  152. // Draw the icon
  153. dc.DrawIcon(x, y, m_hIcon);
  154. }
  155. else
  156. {
  157. CDialog::OnPaint();
  158. }
  159. }
  160. // The system calls this to obtain the cursor to display while the user drags
  161. //  the minimized window.
  162. HCURSOR CDAC_VCDEMODlg::OnQueryDragIcon()
  163. {
  164. return (HCURSOR) m_hIcon;
  165. }
  166. void CDAC_VCDEMODlg::OnMENUExit() 
  167. {
  168. DestroyWindow();
  169. }
  170. void CDAC_VCDEMODlg::OnMENUAbout() 
  171. {
  172. CAboutDlg About;
  173. About.DoModal() ;
  174. }
  175. void CDAC_VCDEMODlg::OnMENUConnect() 
  176. {
  177. int nRet = -1;
  178. ServerBrowserDlg Browser;
  179.     nRet=Browser.DoModal();
  180. if(nRet==IDOK)
  181. {
  182. if(!ServerClassID.IsEmpty())
  183. {
  184. CMenu* mmenu = GetMenu();
  185. mmenu->EnableMenuItem(ID_MENUConnect, MF_GRAYED);
  186. mmenu->EnableMenuItem(ID_MENUDisconnect, MF_ENABLED);
  187. mmenu->EnableMenuItem(ID_MENUServerStatus, MF_ENABLED);
  188. mmenu->EnableMenuItem(ID_MENUGroupStatus, MF_ENABLED);
  189. mmenu->EnableMenuItem(ID_MENUGroupRefresh, MF_ENABLED);
  190. mmenu->EnableMenuItem(ID_MENUItemAdd, MF_ENABLED);
  191. ServerHandle=ASDAC_Connect(ComputerName, ServerClassID, Version);
  192. if(ServerHandle>0)
  193. {
  194. ASDAC_SetDataChangeProc(ServerHandle, DataChangeProc);
  195. ASDAC_SetShutdownProc(ServerHandle, ShutdownProc);
  196. GroupHandle = ASDAC_AddGroup(ServerHandle, GroupName, true, 1000, -480, 0, 0);
  197. if(GroupHandle>0)
  198. {
  199. }
  200. }
  201. }
  202. }
  203. }
  204. void CDAC_VCDEMODlg::OnMENUDisconnect() 
  205. {
  206. if(ServerHandle>0)
  207. {
  208. if(ASDAC_Disconnect(ServerHandle))
  209. {
  210. ServerHandle=0;
  211. GroupHandle=0;
  212. GroupName="GROUP";
  213. m_List.DeleteAllItems();
  214. CMenu* mmenu = GetMenu();
  215. mmenu->EnableMenuItem(ID_MENUConnect, MF_ENABLED);
  216. mmenu->EnableMenuItem(ID_MENUDisconnect, MF_GRAYED);
  217. mmenu->EnableMenuItem(ID_MENUServerStatus, MF_GRAYED);
  218. mmenu->EnableMenuItem(ID_MENUGroupStatus, MF_GRAYED);
  219. mmenu->EnableMenuItem(ID_MENUGroupRefresh, MF_GRAYED);
  220. mmenu->EnableMenuItem(ID_MENUItemAdd, MF_GRAYED);
  221. mmenu->EnableMenuItem(ID_MENUItemRemove, MF_GRAYED);
  222. mmenu->EnableMenuItem(ID_MENUItemRead, MF_GRAYED);
  223. mmenu->EnableMenuItem(ID_MENUItemWrite, MF_GRAYED);
  224. mmenu->EnableMenuItem(ID_MENUItemActive, MF_GRAYED);
  225. mmenu->EnableMenuItem(ID_MENUItemStatus, MF_GRAYED);
  226. }
  227. }
  228. }
  229. void CDAC_VCDEMODlg::OnMENUGroupRefresh() 
  230. {
  231. if((ServerHandle>0)&&(GroupHandle>0))
  232. {
  233. ASDAC_RefreshGroup(ServerHandle, GroupHandle, 1);
  234. }
  235. }
  236. void CDAC_VCDEMODlg::OnMENUGroupStatus() 
  237. {
  238. int nRet=-1;
  239. CString OldGroupName=GroupName;
  240. GroupStatusDlg StatusDlg;
  241. nRet=StatusDlg.DoModal();
  242. if(nRet=IDOK)
  243. {
  244. if(!ASDAC_SetGroupName(ServerHandle, GroupHandle, GroupName))
  245. {
  246. GroupName=OldGroupName;
  247. }
  248. ASDAC_SetGroupStat(ServerHandle, GroupHandle, UpdateRate, Active, TimeBias, DeadBand, 0);
  249. }
  250. }
  251. void CDAC_VCDEMODlg::OnMENUItemAdd() 
  252. {
  253. ItemBrowserDlg Browser;
  254. Browser.DoModal();
  255. }
  256. void CDAC_VCDEMODlg::OnMENUITEMProperties() 
  257. {
  258. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  259. if(nIndex>-1)
  260. {
  261. ItemName=m_List.GetItemText(nIndex,0);
  262. ItemStatusDlg Status;
  263. Status.DoModal();
  264. }
  265. }
  266. void CDAC_VCDEMODlg::OnMENUITEMRead() 
  267. {
  268. VARIANT v;
  269. _FILETIME ft;
  270. WORD quality;
  271. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  272. if(nIndex>-1)
  273. {
  274. CString strText;
  275. DWORD data=m_List.GetItemData(nIndex);
  276. VariantInit(&v);
  277. if(ASDAC_ReadItem(ServerHandle, GroupHandle, data, &v, &ft, &quality))
  278. {
  279. strText.Format(TEXT("%d"),quality);
  280. m_List.SetItemText(nIndex,1,VariantToString(v));
  281. m_List.SetItemText(nIndex,2,strText);
  282. m_List.SetItemText(nIndex,3,FileTimeToString(ft));
  283. }
  284. }
  285. }
  286. void CDAC_VCDEMODlg::OnMENUITEMRemove() 
  287. {
  288. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  289. if(nIndex>-1)
  290. {
  291. DWORD data=m_List.GetItemData(nIndex);
  292. if(ASDAC_RemoveItem(ServerHandle, GroupHandle, data))
  293. {
  294. m_List.DeleteItem(nIndex);
  295. }
  296. }
  297. }
  298. void CDAC_VCDEMODlg::OnMENUITEMWrite() 
  299. {
  300. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  301. if(nIndex>-1)
  302. {
  303. DWORD ItemHandle=m_List.GetItemData(nIndex);
  304. int nRet;
  305. ItemWriteDlg WriteDlg;
  306. nRet=WriteDlg.DoModal();
  307. if(nRet==IDOK)
  308. {
  309. VARIANT v;
  310. VariantInit(&v);
  311. v.vt=VT_BSTR;
  312. v.bstrVal=ItemWriteValue.AllocSysString();
  313. if(ASDAC_WriteItem(ServerHandle, ServerHandle, ItemHandle, v, ASync))
  314. {
  315. m_List.SetItemText(nIndex,1,ItemWriteValue);
  316. }
  317. }
  318. }
  319. }
  320. void CDAC_VCDEMODlg::OnMENUServerStatus() 
  321. {
  322. ServerStatusDlg Status;
  323. Status.DoModal();
  324. }
  325. int CDAC_VCDEMODlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  326. {
  327. if (CDialog::OnCreate(lpCreateStruct) == -1)
  328. return -1;
  329. CMenu* mmenu = GetMenu();
  330. mmenu->EnableMenuItem(ID_MENUDisconnect, MF_GRAYED);
  331. mmenu->EnableMenuItem(ID_MENUServerStatus, MF_GRAYED);
  332. mmenu->EnableMenuItem(ID_MENUGroupStatus, MF_GRAYED);
  333. mmenu->EnableMenuItem(ID_MENUGroupRefresh, MF_GRAYED);
  334. mmenu->EnableMenuItem(ID_MENUItemAdd, MF_GRAYED);
  335. mmenu->EnableMenuItem(ID_MENUItemRemove, MF_GRAYED);
  336. mmenu->EnableMenuItem(ID_MENUItemRead, MF_GRAYED);
  337. mmenu->EnableMenuItem(ID_MENUItemWrite, MF_GRAYED);
  338. mmenu->EnableMenuItem(ID_MENUItemStatus, MF_GRAYED);
  339. mmenu->EnableMenuItem(ID_MENUItemActive, MF_GRAYED);
  340. GroupName="GROUP";
  341. ASDAC_Init();
  342. return 0;
  343. }
  344. void CDAC_VCDEMODlg::OnDestroy() 
  345. {
  346. CDialog::OnDestroy();
  347. ASDAC_Uninit();
  348. }
  349. void CDAC_VCDEMODlg::AddItem(CString name)
  350. {
  351. DWORD ItemHandle=ASDAC_AddItem(ServerHandle, GroupHandle, name);
  352. if(ItemHandle>0)
  353. {
  354. int nIndex=m_List.InsertItem(0xFFFF,name);
  355. if(nIndex>-1)
  356. {
  357. m_List.SetItemData(nIndex, ItemHandle);
  358. m_List.SetItemText(nIndex,1,"Bad");
  359. }
  360. }
  361. }
  362. void CDAC_VCDEMODlg::Refresh(DWORD ItemHandle, VARIANT v, WORD quality, _FILETIME ft)
  363. {
  364. int I;
  365. for(I=0;I<m_List.GetItemCount();I++)
  366. {
  367. if(m_List.GetItemData(I)==ItemHandle)
  368. {
  369. CString strText;
  370. strText.Format(TEXT("%d"),quality);
  371. m_List.SetItemText(I,1,VariantToString(v));
  372. m_List.SetItemText(I,2,strText);
  373. m_List.SetItemText(I,3,FileTimeToString(ft));
  374. }
  375. }
  376. }
  377. void CDAC_VCDEMODlg::ShutDown(DWORD hServer)
  378. {
  379. OnMENUDisconnect();
  380. }
  381. void CDAC_VCDEMODlg::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult) 
  382. {
  383. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  384. // TODO: Add your control notification handler code here
  385. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  386. if(nIndex>-1)
  387. {
  388. CMenu* mmenu = GetMenu();
  389. mmenu->EnableMenuItem(ID_MENUItemRead, MF_ENABLED);
  390. mmenu->EnableMenuItem(ID_MENUItemWrite, MF_ENABLED);
  391. mmenu->EnableMenuItem(ID_MENUItemStatus, MF_ENABLED);
  392. mmenu->EnableMenuItem(ID_MENUItemRemove, MF_ENABLED);
  393. mmenu->EnableMenuItem(ID_MENUItemActive, MF_ENABLED);
  394. }
  395. *pResult = 0;
  396. }
  397. void CDAC_VCDEMODlg::OnMENUItemActive() 
  398. {
  399. int nIndex=m_List.GetNextItem(-1, LVNI_FOCUSED);
  400. if(nIndex>-1)
  401. {
  402. int nRet;
  403. DWORD ItemHandle=m_List.GetItemData(nIndex);
  404. ItemActiveDlg ActiveDlg;
  405. nRet=ActiveDlg.DoModal();
  406. if(nRet==IDOK)
  407. ASDAC_ActiveItem(ServerHandle, GroupHandle, ItemHandle, Active);
  408. }
  409. }