DlgSelectDev.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. // DlgSelectDev.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "IDE.h"
  5. #include "DlgSelectDev.h"
  6. #include ".\dlgselectdev.h"
  7. #include "MainFrm.h"
  8. #include "Serial.h"
  9. #include "Network.h"
  10. #include "Wizard.h"
  11. #include "DlgDevice.h"
  12. #include "DlgComPort.h"
  13. // CDlgSelectDev 对话框
  14. IMPLEMENT_DYNAMIC(CDlgSelectDev, CDialog)
  15. CDlgSelectDev::CDlgSelectDev(CWnd* pParent /*=NULL*/)
  16. : CDialog(CDlgSelectDev::IDD, pParent)
  17. {
  18. }
  19. CDlgSelectDev::~CDlgSelectDev()
  20. {
  21. }
  22. void CDlgSelectDev::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. DDX_Control(pDX, IDC_TREE_DEVICE, m_wndTree);
  26. }
  27. BEGIN_MESSAGE_MAP(CDlgSelectDev, CDialog)
  28. ON_BN_CLICKED(IDC_BTN_CANCEL, OnBnClickedBtnCancel)
  29. ON_BN_CLICKED(IDC_BTN_CONFIRM, OnBnClickedBtnConfirm)
  30. ON_BN_CLICKED(IDC_BTN_DEV_ADD, OnBnClickedBtnDevAdd)
  31. ON_BN_CLICKED(IDC_BTN_DEV_EDIT, OnBnClickedBtnDevEdit)
  32. ON_BN_CLICKED(IDC_BTN_DEV_DEL, OnBnClickedBtnDevDel)
  33. ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_DEVICE, OnTvnSelchangedTreeDevice)
  34. ON_NOTIFY(NM_DBLCLK, IDC_TREE_DEVICE, OnNMDblclkTreeDevice)
  35. END_MESSAGE_MAP()
  36. // CDlgSelectDev 消息处理程序
  37. BOOL CDlgSelectDev::OnInitDialog()
  38. {
  39. CDialog::OnInitDialog();
  40. // TODO: 在此添加额外的初始化
  41. InitTreeInfo();
  42. MyExpandTree( m_wndTree.GetRootItem() );
  43. return TRUE; // return TRUE unless you set the focus to a control
  44. // 异常: OCX 属性页应返回 FALSE
  45. }
  46. void CDlgSelectDev::MyExpandTree(HTREEITEM hTreeItem)
  47. {
  48. if(!m_wndTree.ItemHasChildren(hTreeItem))
  49. {
  50. return;
  51. }
  52. HTREEITEM hNextItem = m_wndTree.GetChildItem(hTreeItem);
  53. while (hNextItem != NULL)
  54. {
  55. MyExpandTree(hNextItem);
  56. hNextItem = m_wndTree.GetNextItem(hNextItem, TVGN_NEXT);
  57. }
  58. m_wndTree.Expand(hTreeItem,TVE_EXPAND);
  59. }
  60. void CDlgSelectDev::InitTreeInfo(void)
  61. {
  62. m_wndTree.ModifyStyle(0, TVS_HASBUTTONS | TVS_LINESATROOT
  63. | TVS_HASLINES | TVS_DISABLEDRAGDROP
  64. | TVS_SHOWSELALWAYS);
  65. m_wndTree.DeleteAllItems();
  66. m_wndTree.SetItemHeight(20);
  67. m_wndImageList.DeleteImageList();
  68. m_wndImageList.Create(IDB_LEFT, 16, 1, RGB(255, 0, 255));
  69. m_wndTree.SetImageList(&m_wndImageList, LVSIL_NORMAL);
  70. //插入串口和设备
  71. HTREEITEM hRoot = m_wndTree.InsertItem(g_strAllDev, 0, 0);
  72. int nComportSize = pDevicesManager->m_channels.GetSize();
  73. for (int i = 0; i < nComportSize; i++)
  74. {
  75. CChannel* pComport = pDevicesManager->m_channels[i];
  76. if( pComport->m_nCommunicateType == 1 )
  77. {
  78. m_hSerialGroup[i] = m_wndTree.InsertItem(g_strEthernet,5,5,hRoot);
  79. }
  80. else
  81. {
  82. m_hSerialGroup[i] = m_wndTree.InsertItem(pComport->m_strName,5,5,hRoot);
  83. }
  84. int nDeviceSize = pComport->m_Devices.GetSize();
  85. for (int j = 0; j < nDeviceSize; j++)
  86. {
  87. CDevice* pDev = pComport->m_Devices[j];
  88. m_hSerialDev[i][j] = m_wndTree.InsertItem(pDev->m_strName,4,4,m_hSerialGroup[i]);
  89. }
  90. }
  91. }
  92. void CDlgSelectDev::ShowDevProperty(HTREEITEM hSelectedItem)
  93. {
  94. #if 0
  95. CString strOldUid, strNewUid;
  96. CMainFrame *pMainFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
  97. int i, j;
  98. int nChannelIndex = -1, nDeviceIndex = -1;
  99. int nChannelSize = pDevicesManager->m_channels.GetSize();
  100. // 串口设备属性设置
  101. for (i = 0; i < nChannelSize; i++)
  102. {
  103. if( nChannelIndex != -1 && nDeviceIndex != -1 ) break;
  104. int nDeviceSize = pDevicesManager->m_channels[i]->m_Devices.GetSize();
  105. for( j = 0; j < nDeviceSize; j++)
  106. {
  107. if (m_hSerialDev[i][j]==hSelectedItem)
  108. {
  109. nChannelIndex = i;
  110. nDeviceIndex = j;
  111. break;
  112. }
  113. if( m_hNetworkDev[j] == hSelectedItem &&
  114. pDevicesManager->m_channels[i]->m_nCommunicateType == 1 )
  115. {
  116. nChannelIndex = i;
  117. nDeviceIndex = j;
  118. break;
  119. }
  120. }
  121. }
  122. CChannel* pChannel = pDevicesManager->m_channels[nChannelIndex];
  123. CDevice* pDev = pChannel->m_Devices[nDeviceIndex];
  124. //CSerial* pSerial = (CSerial *)pChannel;
  125. CNetwork *pNetwork = (CNetwork *)pChannel;
  126. CWizard MyWizard(g_strMywizard,this,1);
  127. // 通信方式
  128. pMainFrm->m_wndDevice.m_nCommuniteType = pChannel->m_nCommunicateType;
  129. // 设备驱动名称
  130. pMainFrm->m_wndDevice.m_strDevDriveName = pDev->m_strDevDriveName;
  131. // 设备厂家名称
  132. pMainFrm->m_wndDevice.m_strDevFactoryName = pDev->m_strDevFactoryName;
  133. // 设备型号
  134. pMainFrm->m_wndDevice.m_strDevTypeName = pDev->m_strType;
  135. // 通信协议(例:Modbus rtu, modbus ascii, modbus tcp)
  136. pMainFrm->m_wndDevice.m_nProtocolType = pDev->m_nProtocolType;
  137. // 协议驱动动态库名称
  138. pMainFrm->m_wndDevice.m_strProtocolName = pDev->m_strProtocolName;
  139. // 是否为采集设备
  140. pMainFrm->m_wndDevice.m_nCollectDev = pDev->m_nIsCollectDev;
  141. // 是否启用设备
  142. pMainFrm->m_wndDevice.m_nDevEnable = (int)pDev->m_bUsed;
  143. // 设备UID
  144. pMainFrm->m_wndComport.m_strUID = pDev->m_strUID;
  145. // 设备名称
  146. pMainFrm->m_wndComport.m_strDevName = pDev->m_strName;
  147. // 设备所属区域
  148. pMainFrm->m_wndComport.m_strDevArea = pDev->m_strDevArea;
  149. // 通讯超时
  150. pMainFrm->m_wndComport.m_nTimeout = pDev->m_nTimeout;
  151. // 设备地址
  152. pMainFrm->m_wndComport.m_nDevAddr = (int)pDev->m_Address;
  153. // 串行端口
  154. pMainFrm->m_wndComport.m_nCommPort = atoi(pSerial->m_strPort.Mid(3));
  155. // 数据位
  156. pMainFrm->m_wndComport.m_nDataBit = pSerial->m_nByteSize;
  157. // 波特率
  158. pMainFrm->m_wndComport.m_nRate = pSerial->m_nBaudRate;
  159. // 停止位
  160. pMainFrm->m_wndComport.m_nStopBit = pSerial->m_nStopBits;
  161. // 校验位
  162. pMainFrm->m_wndComport.m_nCheckCode = pSerial->m_nParity;
  163. if( pChannel->m_nCommunicateType == 1 )
  164. {
  165. // 设备IP
  166. pMainFrm->m_wndComport.m_nNetIP = htonl(inet_addr(pDev->m_strDevIP));
  167. // 通讯端口
  168. pMainFrm->m_wndComport.m_nNetPort = pDev->m_nNetPort;
  169. }
  170. pMainFrm->m_wndDevice.m_operation = CDlgDevice::EDIT;
  171. MyWizard.AddPage( &pMainFrm->m_wndDevice );
  172. MyWizard.AddPage( &pMainFrm->m_wndComport );
  173. MyWizard.SetWizardMode();
  174. MyWizard.SetActivePage( &pMainFrm->m_wndDevice );
  175. int nTmpChannelIndex = -1, nTmpDeviceIndex = -1;
  176. if( MyWizard.DoModal() == ID_WIZFINISH )
  177. {
  178. if( !pMainFrm->m_wndComport.m_strDevName.Compare("") )
  179. {
  180. MessageBox(g_strDevNumCannotBlank, g_strTip, MB_ICONINFORMATION);
  181. return;
  182. }
  183. else if( pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName != pMainFrm->m_wndComport.m_strDevName )
  184. {
  185. if( pDevicesManager->FindDev(pMainFrm->m_wndComport.m_strDevName, nTmpChannelIndex, nTmpDeviceIndex) )
  186. {
  187. MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION);
  188. return;
  189. }
  190. }
  191. if( pMainFrm->m_wndDevice.m_nCommuniteType == 0 )
  192. {
  193. CString strName;
  194. strName.Format("COM%d", pMainFrm->m_wndComport.m_nCommPort);
  195. //TRACE("串口名称=%s\r\n", pDevicesManager->m_channels[nChannelIndex]->m_strName);
  196. if( pDevicesManager->m_channels[nChannelIndex]->m_strName.Compare("") &&
  197. pDevicesManager->m_channels[nChannelIndex]->m_strName != strName )
  198. {
  199. int nIndex;
  200. nIndex = pDevicesManager->FindCommPort(strName);
  201. if( nIndex == -1 )
  202. {
  203. if( pMainFrm->FinishedAddDevice() == 1 )
  204. {
  205. DeleteDevInfo((char *)(LPCTSTR)pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID);
  206. pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex);
  207. //InitTreeInfo();
  208. }
  209. return;
  210. }
  211. else
  212. {
  213. if( pDevicesManager->FindCommPort(strName, pMainFrm->m_wndComport.m_nDevAddr, nTmpChannelIndex, nTmpDeviceIndex) )
  214. {
  215. MessageBox(g_strSerialPortInUse, g_strTip, MB_ICONINFORMATION);
  216. return;
  217. }
  218. if( pDevicesManager->FindDev(strName, nTmpChannelIndex, nTmpDeviceIndex) )
  219. {
  220. MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION);
  221. return;
  222. }
  223. //nChannelIndex = nIndex;
  224. if( pMainFrm->FinishedAddDevice() == 1 )
  225. {
  226. DeleteDevInfo((char *)(LPCTSTR)pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID);
  227. pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex);
  228. //InitTreeInfo();
  229. }
  230. Invalidate(FALSE);
  231. return;
  232. //nDeviceIndex = pDevicesManager->m_channels[nChannelIndex]->m_Devices.GetSize();
  233. }
  234. }
  235. else
  236. {
  237. if( pDevicesManager->FindDev(strName, nTmpChannelIndex, nTmpDeviceIndex) )
  238. {
  239. MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION);
  240. return;
  241. }
  242. }
  243. }
  244. else
  245. {
  246. CString strIP = inet_ntoa(*(struct in_addr *)&pMainFrm->m_wndComport.m_nNetIP);
  247. if( pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevIP != strIP )
  248. {
  249. if( pDevicesManager->FindDev(strIP, pMainFrm->m_wndComport.m_nNetPort, nTmpChannelIndex, nTmpDeviceIndex) )
  250. {
  251. MessageBox(g_strIPComoccupy, g_strTip, MB_ICONINFORMATION);
  252. return;
  253. }
  254. }
  255. }
  256. // 通信方式
  257. pDevicesManager->m_channels[nChannelIndex]->m_nCommunicateType = pMainFrm->m_wndDevice.m_nCommuniteType;
  258. // 设备驱动名称
  259. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevDriveName = pMainFrm->m_wndDevice.m_strDevDriveName;
  260. // 设备厂家名称
  261. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevFactoryName = pMainFrm->m_wndDevice.m_strDevFactoryName;
  262. // 设备型号
  263. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strType = pMainFrm->m_wndDevice.m_strDevTypeName;
  264. // 通信协议(例:Modbus rtu, modbus ascii, modbus tcp)
  265. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nProtocolType = pMainFrm->m_wndDevice.m_nProtocolType;
  266. // 协议驱动动态库名称
  267. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strProtocolName = pMainFrm->m_wndDevice.m_strProtocolName;
  268. // 是否为采集设备
  269. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nIsCollectDev = pMainFrm->m_wndDevice.m_nCollectDev;
  270. // 是否启用设备
  271. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bUsed = (BOOL)pMainFrm->m_wndDevice.m_nDevEnable;
  272. // 设备UID
  273. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID = pMainFrm->m_wndComport.m_strUID;
  274. strNewUid = pMainFrm->m_wndComport.m_strUID;
  275. // 设备名称
  276. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName = pMainFrm->m_wndComport.m_strDevName;
  277. // 设备所属区域
  278. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevArea = pMainFrm->m_wndComport.m_strDevArea;
  279. // 通讯超时
  280. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nTimeout = pMainFrm->m_wndComport.m_nTimeout;
  281. // 设备地址
  282. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_Address = (BYTE)pMainFrm->m_wndComport.m_nDevAddr;
  283. int nIP = htonl(pMainFrm->m_wndComport.m_nNetIP);
  284. if( pMainFrm->m_wndDevice.m_nCommuniteType == 0 )
  285. {
  286. pDevicesManager->m_channels[nChannelIndex]->m_strName.Format("COM%d", pMainFrm->m_wndComport.m_nCommPort);
  287. // 串行端口
  288. pDevicesManager->m_channels[nChannelIndex]->m_strPort.Format("COM%d", pMainFrm->m_wndComport.m_nCommPort);
  289. // 数据位
  290. pDevicesManager->m_channels[nChannelIndex]->m_nByteSize = pMainFrm->m_wndComport.m_nDataBit;
  291. // 波特率
  292. pDevicesManager->m_channels[nChannelIndex]->m_nBaudRate = pMainFrm->m_wndComport.m_nRate;
  293. // 停止位
  294. pDevicesManager->m_channels[nChannelIndex]->m_nStopBits = pMainFrm->m_wndComport.m_nStopBit;
  295. // 校验位
  296. pDevicesManager->m_channels[nChannelIndex]->m_nParity = pMainFrm->m_wndComport.m_nCheckCode;
  297. }
  298. else if( pMainFrm->m_wndComport.m_nCommunicateMode == 1 )
  299. {
  300. // 设备IP
  301. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevIP = inet_ntoa(*(struct in_addr *)&nIP);
  302. // 通讯端口
  303. pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nNetPort = pMainFrm->m_wndComport.m_nNetPort;
  304. }
  305. CHAR szDevTypeID[MAX_ID + 1] = {0};
  306. // 获取设备类型ID
  307. GetDevTypeID( (char *)(LPCTSTR)pMainFrm->m_wndDevice.m_strDevTypeName, szDevTypeID );
  308. // 修改设备信息
  309. //EditDevInfo( (char *)(LPCTSTR)strOldUid,
  310. // (char *)(LPCTSTR)strNewUid,
  311. // pMainFrm->m_wndComport.m_nCommPort,
  312. // pMainFrm->m_wndComport.m_nDevAddr,
  313. // (char *)(LPCTSTR)pMainFrm->m_wndComport.m_strDevName,
  314. // atoi(szDevTypeID),
  315. // pMainFrm->m_wndComport.m_nRate,
  316. // pMainFrm->m_wndComport.m_nDataBit,
  317. // pMainFrm->m_wndComport.m_nStopBit,
  318. // pMainFrm->m_wndComport.m_nCheckCode,
  319. // 0,
  320. // inet_ntoa(*(struct in_addr *)&nIP),
  321. // pMainFrm->m_wndComport.m_nNetPort,
  322. // pMainFrm->m_wndComport.m_nCommunicateMode,
  323. // pMainFrm->m_wndDevice.m_nCollectDev,
  324. // pMainFrm->m_wndDevice.m_nProtocolType,
  325. // pMainFrm->m_wndComport.m_nTimeout,
  326. // pMainFrm->m_wndDevice.m_nDevEnable,
  327. // (char *)(LPCTSTR)pMainFrm->m_wndDevice.m_strProtocolName,
  328. // (char *)(LPCTSTR)pMainFrm->m_wndComport.m_strDevArea);
  329. }
  330. pMainFrm->m_wndTree.SetItemText(pMainFrm->m_hSerialDev[nChannelIndex][nDeviceIndex], pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName);
  331. m_wndTree.SetItemText(hSelectedItem, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName);
  332. Invalidate(FALSE);
  333. #endif
  334. }
  335. void CDlgSelectDev::DeleteDev()
  336. {
  337. CMainFrame *pMainFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
  338. int i, j;
  339. CString strMessage, strSelect;
  340. HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem();
  341. strSelect = m_wndTree.GetItemText( hSelectedItem );
  342. int nChannelNo = -1, nDeviceNo = -1;
  343. int nChannelSize = pDevicesManager->m_channels.GetSize();
  344. // 串口设备属性设置
  345. for (i = 0; i < nChannelSize; i++)
  346. {
  347. if( nChannelNo != -1 && nDeviceNo != -1 ) break;
  348. int nDeviceSize = pDevicesManager->m_channels[i]->m_Devices.GetSize();
  349. for( j = 0; j < nDeviceSize; j++)
  350. {
  351. if (m_hSerialDev[i][j]==hSelectedItem)
  352. {
  353. nChannelNo = i;
  354. nDeviceNo = j;
  355. break;
  356. }
  357. if( m_hNetworkDev[j] == hSelectedItem &&
  358. pDevicesManager->m_channels[i]->m_nCommunicateType == 1 )
  359. {
  360. nChannelNo = i;
  361. nDeviceNo = j;
  362. break;
  363. }
  364. }
  365. }
  366. CChannel* pChannel = pDevicesManager->m_channels[nChannelNo];
  367. CDevice* pDev = pChannel->m_Devices[nDeviceNo];
  368. strMessage.Format(g_strDelDev,pDev->m_strName);
  369. if (MessageBox(strMessage,g_strConfirm,MB_YESNO|MB_ICONQUESTION) == IDNO) return;
  370. m_wndTree.DeleteItem(hSelectedItem);
  371. if( pChannel->m_nCommunicateType == 0 )
  372. {
  373. for( j = nDeviceNo; j < MAX_DEVICE_NUM; j++ )
  374. {
  375. m_hSerialDev[nChannelNo][j] = m_hSerialDev[nChannelNo][j+1];
  376. }
  377. }
  378. else if( pChannel->m_nCommunicateType = 1 )
  379. {
  380. for( j = nDeviceNo; j < MAX_DEVICE_NUM; j++ )
  381. {
  382. m_hNetworkDev[j] = m_hNetworkDev[j+1];
  383. }
  384. }
  385. CDBInterface::GetInstancePtr()->DeleteDevInfo( (char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID );
  386. delete pChannel->m_Devices[nDeviceNo];
  387. pChannel->m_Devices.RemoveAt(nDeviceNo);
  388. pMainFrm->InitTreeInfo();
  389. }
  390. void CDlgSelectDev::OnBnClickedBtnCancel()
  391. {
  392. // TODO: 在此添加控件通知处理程序代码
  393. OnCancel();
  394. }
  395. void CDlgSelectDev::OnBnClickedBtnConfirm()
  396. {
  397. // TODO: 在此添加控件通知处理程序代码
  398. // 选择设备完成
  399. OnOK();
  400. }
  401. void CDlgSelectDev::OnBnClickedBtnDevAdd()
  402. {
  403. // TODO: 在此添加控件通知处理程序代码
  404. CMainFrame *pMainFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
  405. pMainFrm->AddDevice();
  406. InitTreeInfo();
  407. }
  408. void CDlgSelectDev::OnBnClickedBtnDevEdit()
  409. {
  410. // TODO: 在此添加控件通知处理程序代码
  411. HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem();
  412. // 设备属性设置
  413. ShowDevProperty(hSelectedItem);
  414. }
  415. void CDlgSelectDev::OnBnClickedBtnDevDel()
  416. {
  417. // TODO: 在此添加控件通知处理程序代码
  418. DeleteDev();
  419. }
  420. void CDlgSelectDev::SelChangedTreeDeviceFolder(HTREEITEM hItemSelect)
  421. {
  422. m_strDevName = m_wndTree.GetItemText( hItemSelect );
  423. HTREEITEM hItemParent = m_wndTree.GetParentItem( hItemSelect );
  424. if( hItemParent != NULL )
  425. {
  426. hItemParent = m_wndTree.GetParentItem( hItemParent );
  427. if( hItemParent != NULL )
  428. {
  429. GetDlgItem(IDC_BTN_CONFIRM)->EnableWindow(TRUE);
  430. }
  431. else
  432. {
  433. GetDlgItem(IDC_BTN_CONFIRM)->EnableWindow(FALSE);
  434. return;
  435. }
  436. }
  437. else
  438. {
  439. GetDlgItem(IDC_BTN_CONFIRM)->EnableWindow(FALSE);
  440. return;
  441. }
  442. }
  443. void CDlgSelectDev::OnTvnSelchangedTreeDevice(NMHDR *pNMHDR, LRESULT *pResult)
  444. {
  445. LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
  446. // TODO: 在此添加控件通知处理程序代码
  447. HTREEITEM hItemSelect = pNMTreeView->itemNew.hItem;
  448. SelChangedTreeDeviceFolder( hItemSelect );
  449. *pResult = 0;
  450. }
  451. void CDlgSelectDev::OnNMDblclkTreeDevice(NMHDR *pNMHDR, LRESULT *pResult)
  452. {
  453. // TODO: 在此添加控件通知处理程序代码
  454. int i;
  455. HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem();
  456. for (i = 0; i < MAX_SERIAL_NUM; i++)
  457. {
  458. for( int j = 0; j < MAX_DEVICE_NUM; j++)
  459. {
  460. if (m_hSerialDev[i][j]==hSelectedItem)
  461. {
  462. OnOK();
  463. return;
  464. }
  465. }
  466. }
  467. *pResult = 0;
  468. }