RtListView.cpp
上传用户:shtiemo
上传日期:2017-12-29
资源大小:163k
文件大小:10k
开发平台:

Visual C++

  1. // RtListView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "PasRTDat.h"
  5. #include "RtListView.h"
  6. #include "PerDlg.h"
  7. #include "TimeDlg.h"
  8. #include "PasRTDatDoc.h"
  9. #include "SetYCDlg.h"
  10. #include "SetYXDlg.h"
  11. #include "RtreeView.h"
  12. #include "RTDatOpr.h"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CRtListView
  20. IMPLEMENT_DYNCREATE(CRtListView, CListView)
  21. CRtListView::CRtListView()
  22. {
  23. gRtuID = 9999;
  24. }
  25. CRtListView::~CRtListView()
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CRtListView, CListView)
  29. //{{AFX_MSG_MAP(CRtListView)
  30. ON_WM_CREATE()
  31. ON_WM_LBUTTONDBLCLK()
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP()
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CRtListView drawing
  36. void CRtListView::OnDraw(CDC* pDC)
  37. {
  38. CDocument* pDoc = GetDocument();
  39. // TODO: add draw code here
  40. }
  41. CPasRTDatDoc *CRtListView::GetDoc()
  42. {
  43. return (CPasRTDatDoc*)GetDocument();
  44. }
  45. void CRtListView::InitialList()
  46. {
  47. CListCtrl& ListCtrl = GetListCtrl();
  48. long lStyle; 
  49. lStyle = ListCtrl.SendMessageA(0x1037, 0, 0); // 取扩展风格 
  50. lStyle |= 0x20|0x400|0x1; // 扩展风格--选 
  51. ListCtrl.SendMessageA(0x1036, 0, lStyle); // 设置扩展风格 
  52. /* #define LVS_EX_GRIDLINES        0x00000001
  53. #define LVS_EX_SUBITEMIMAGES    0x00000002
  54. #define LVS_EX_CHECKBOXES       0x00000004
  55. #define LVS_EX_TRACKSELECT      0x00000008
  56. #define LVS_EX_HEADERDRAGDROP   0x00000010
  57. #define LVS_EX_FULLROWSELECT    0x00000020 // applies to report mode only
  58. #define LVS_EX_ONECLICKACTIVATE 0x00000040
  59. #define LVS_EX_TWOCLICKACTIVATE 0x00000080
  60. #define LVS_EX_FLATSB           0x00000100
  61. #define LVS_EX_REGIONAL         0x00000200
  62. #define LVS_EX_INFOTIP          0x00000400 // listview does InfoTips for you
  63. #define LVS_EX_UNDERLINEHOT     0x00000800
  64. #define LVS_EX_UNDERLINECOLD    0x00001000
  65. #define LVS_EX_MULTIWORKAREAS   0x00002000*/
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CRtListView diagnostics
  69. #ifdef _DEBUG
  70. void CRtListView::AssertValid() const
  71. {
  72. CListView::AssertValid();
  73. }
  74. void CRtListView::Dump(CDumpContext& dc) const
  75. {
  76. CListView::Dump(dc);
  77. }
  78. #endif //_DEBUG
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CRtListView message handlers
  81. int CRtListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  82. {
  83. lpCreateStruct->style |= LVS_REPORT|LVS_SHOWSELALWAYS;
  84. if (CListView::OnCreate(lpCreateStruct) == -1)
  85. return -1;
  86. // TODO: Add your specialized creation code here
  87. GetDoc()->m_pListV = this;
  88. return 0;
  89. }
  90. //////////////////////////////////////////////////////////////////////////////
  91. static CHAR *YCFieldName[4] =
  92. {
  93. "RTU名字","遥测点序号","遥测点名称","遥测值"
  94. };
  95. ///////////////////////////////////////////////////////////////////////////////
  96. static CHAR *YXFieldName[4] =
  97. {
  98. "RTU名字","遥信点序号","遥信点名称","遥信值"
  99. };
  100. ///////////////////////////////////////////////////////////////////////////////
  101. static int ColumnWidth[4] = 
  102. {
  103. 106,80,196,100
  104. };
  105. //////////////////////////////////////////////////////////////////////////////
  106. void CRtListView::FillListColumn(CListCtrl& listc,LV_COLUMN lv,char *ColumnName[],int num)
  107. {
  108. lv.mask = LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM| LVCF_WIDTH;
  109. for (int i=0;i<num;i++)
  110. {
  111. lv.iSubItem = i;
  112. lv.pszText = ColumnName[i];
  113. lv.cx = ColumnWidth[i];
  114. lv.cchTextMax = 64; 
  115. lv.fmt = LVCFMT_LEFT;
  116. listc.InsertColumn(i,&lv);
  117. }
  118. }
  119. ///////////////////////////////////////////////////////////////////////////////
  120. void CRtListView::FillListYC(int nStart,int nYCYXNum)
  121. {
  122. int nFields,i,j;
  123. float fCoef, fOffSet,YCtmp;
  124. CString RtuName,strParaName;
  125. char Name[64],Num[5],YCvalue[20];
  126. LV_COLUMN lvc;
  127. LV_ITEM lvi;
  128. CListCtrl& ListCtrl = GetListCtrl();
  129. ListCtrl.DeleteAllItems();
  130. while(ListCtrl.DeleteColumn(0));
  131. UpdateWindow();
  132. //int Infonum = YCInfoAry2.GetSize();
  133. nFields = 4;
  134. if (nYCYXNum > 0)
  135. {
  136. lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM| LVCF_WIDTH;
  137. FillListColumn(ListCtrl,lvc,YCFieldName,nFields);
  138. for (i=nStart;i<nYCYXNum+nStart;i++)
  139. {
  140. for (j=1;j<=nFields; j++)
  141. {
  142. if (j==1)
  143. {
  144. lvi.mask = LVIF_TEXT  ;
  145. lvi.iItem = 0;
  146. lvi.iImage= 2;
  147. lvi.cchTextMax=64;
  148. GetRtuName(&(YCInfoAry1[i]->DBID),RtuName,1);
  149. lvi.pszText = RtuName.GetBuffer(64); 
  150. if (YCInfoAry1[i]->bChanged == 1)
  151. ListCtrl.InsertItem(i,RtuName.GetBuffer(64),0);
  152. else
  153. ListCtrl.InsertItem(i,RtuName.GetBuffer(64),2);
  154. }
  155. else
  156. {
  157. lvi.mask = LVIF_TEXT  ;
  158. lvi.iItem = i-nStart;
  159. lvi.cchTextMax=64; 
  160. switch(j) 
  161. {
  162. case 2:
  163. sprintf(Num,"%d",i);
  164. lvi.pszText = Num;
  165. break;
  166. case 3:
  167. if (GetMeaCoef(&(YCInfoAry1[i]->DBID), &fCoef, &fOffSet, strParaName))
  168. {
  169. sprintf(Name, strParaName);
  170. }
  171. lvi.pszText = Name;
  172. break;
  173. case 4:
  174. YCtmp = YCInfoAry1[i]->fVal*fCoef; 
  175. sprintf(YCvalue,"%f",YCtmp);
  176. lvi.pszText = YCvalue;
  177. break;
  178. }
  179. lvi.iSubItem = j-1;
  180. ListCtrl.SetItem(&lvi);
  181. }
  182. }
  183. }
  184. }
  185. }
  186. ////////////////////////////////////////////////////////////////////////////////
  187. void CRtListView::FillListYX(int nStart,int nYCYXNum)
  188. {
  189. int nFields,i,j,YXtmp;
  190. float fCoef, fOffSet;
  191. CString RtuName,strParaName;
  192. char Name[64],Num[3],YXstate[3];
  193. LV_COLUMN lvc;
  194. LV_ITEM lvi;
  195. CListCtrl& ListCtrl = GetListCtrl();
  196. ListCtrl.DeleteAllItems();
  197. while(ListCtrl.DeleteColumn(0));
  198. UpdateWindow();
  199. nFields = 4;
  200. if (nYCYXNum > 0)
  201. {
  202. lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM| LVCF_WIDTH;
  203. FillListColumn(ListCtrl,lvc,YXFieldName,nFields);
  204. for (i=nStart;i<nYCYXNum+nStart;i++)
  205. {
  206. for (j=1;j<=nFields; j++)
  207. {
  208. if (j==1)
  209. {
  210. lvi.mask = LVIF_TEXT  ;
  211. lvi.iItem = 0;
  212. lvi.iImage = 2;
  213. lvi.cchTextMax=64;
  214. GetRtuName(&(YXInfoAry1[i]->DBID),RtuName,2);
  215. lvi.pszText = RtuName.GetBuffer(64); 
  216. if (YXInfoAry1[i]->bChanged == 1)
  217. ListCtrl.InsertItem(i,RtuName.GetBuffer(64),0);
  218. else
  219. ListCtrl.InsertItem(i,RtuName.GetBuffer(64),2);
  220. }
  221. else
  222. {
  223. lvi.mask = LVIF_TEXT  ;
  224. lvi.iItem =i-nStart;
  225. lvi.cchTextMax=64; 
  226. switch(j) 
  227. {
  228. case 2:
  229. sprintf(Num,"%d",i);
  230. lvi.pszText = Num;
  231. break;
  232. case 3:
  233. if (GetMeaCoef(&(YXInfoAry1[i]->DBID), &fCoef, &fOffSet, strParaName))
  234. {
  235. sprintf(Name, strParaName);
  236. }
  237. lvi.pszText = Name;
  238. break;
  239. case 4:
  240. YXtmp = YXInfoAry1[i]->bVal; 
  241. sprintf(YXstate,"%d",YXtmp);
  242. lvi.pszText = YXstate;
  243. break;
  244. }
  245. lvi.iSubItem = j-1;
  246. ListCtrl.SetItem(&lvi);
  247. }
  248. }
  249. }
  250. }
  251. }
  252. ////////////////////////////////////////////////////////////////////////////////
  253. void CRtListView::OnInitialUpdate() 
  254. {
  255. CListView::OnInitialUpdate();
  256. // TODO: Add your specialized code here and/or call the base class
  257. CListCtrl& ListCtrl = GetListCtrl();
  258. m_ImageList.Create(IDB_CHANGE, 16, 1, RGB(255, 255, 255));
  259. m_ImageList.SetOverlayImage(3, 1);
  260. ListCtrl.SetImageList(&m_ImageList, LVSIL_SMALL);
  261. /*long lStyle; 
  262. lStyle = ListCtrl.SendMessageA(0x1037, 0, 0); // 取扩展风格 
  263. lStyle |= 0x20|0x400|0x1; // 扩展风格--选 
  264. ListCtrl.SendMessageA(0x1036, 0, lStyle); // 设置扩展风格 
  265. #define LVS_EX_GRIDLINES        0x00000001
  266. #define LVS_EX_SUBITEMIMAGES    0x00000002
  267. #define LVS_EX_CHECKBOXES       0x00000004
  268. #define LVS_EX_TRACKSELECT      0x00000008
  269. #define LVS_EX_HEADERDRAGDROP   0x00000010
  270. #define LVS_EX_FULLROWSELECT    0x00000020 // applies to report mode only
  271. #define LVS_EX_ONECLICKACTIVATE 0x00000040
  272. #define LVS_EX_TWOCLICKACTIVATE 0x00000080
  273. #define LVS_EX_FLATSB           0x00000100
  274. #define LVS_EX_REGIONAL         0x00000200
  275. #define LVS_EX_INFOTIP          0x00000400 // listview does InfoTips for you
  276. #define LVS_EX_UNDERLINEHOT     0x00000800
  277. #define LVS_EX_UNDERLINECOLD    0x00001000
  278. #define LVS_EX_MULTIWORKAREAS   0x00002000
  279. */
  280. }
  281. void CRtListView::OnLButtonDblClk(UINT nFlags, CPoint point) 
  282. {
  283. // TODO: Add your message handler code here and/or call default
  284. CListCtrl& ListCtrl = GetListCtrl();
  285. CRtreeView *pTreeV;
  286. int i = 0;
  287. UINT uFlags = 0;
  288. int cx = 0;
  289. SetYCDlg SetYCDlg1;
  290. SetYXDlg SetYXDlg1;
  291. pTreeV = GetDoc()->m_pTreeV;
  292. CClientDC dc(this);
  293. OnPrepareDC(&dc);
  294. dc.DPtoLP(&point);
  295. HTREEITEM hTreeItem;
  296. CString NodeName;
  297. CTreeCtrl &pTreeCtrl = pTreeV->GetTreeCtrl();
  298. hTreeItem = pTreeCtrl.GetSelectedItem();
  299. i = ListCtrl.HitTest(point,&uFlags);
  300. for (int j=0;j<=2;j++)
  301. {
  302. cx = cx+ListCtrl.GetColumnWidth(j);
  303. }
  304. if((point.x>cx-10)&&(point.x<cx+ListCtrl.GetColumnWidth(3)+10))
  305. {
  306. if (hTreeItem)
  307. {
  308. NodeName = pTreeCtrl.GetItemText(hTreeItem);
  309. }
  310. if(NodeName=="RTU 遥测一览")
  311. {
  312. CString YCname=ListCtrl.GetItemText(i,2);
  313. CString valuetmp=ListCtrl.GetItemText(i,3);
  314. float YCvalue=(float)atof(valuetmp.GetBuffer(32));
  315. SetYCDlg1.m_pListV = this;
  316. SetYCDlg1.m_YCName = YCname;
  317. SetYCDlg1.m_OldValue = YCvalue;
  318. SetYCDlg1.RowIndex = i;
  319. SetYCDlg1.DoModal();
  320. }
  321. else if (NodeName=="RTU 遥信一览")
  322. {
  323. CString YXname=ListCtrl.GetItemText(i,2);
  324. CString Statemp=ListCtrl.GetItemText(i,3);
  325. BOOL YXstate=(BOOL)atoi(Statemp.GetBuffer(32));
  326. SetYXDlg1.m_pListV = this;
  327. SetYXDlg1.m_YXName = YXname;
  328. SetYXDlg1.m_OldState = YXstate;
  329. SetYXDlg1.RowIndex = i;
  330. SetYXDlg1.DoModal();
  331. }
  332. }
  333. CListView::OnLButtonDblClk(nFlags, point);
  334. }