ClickListDLG.cpp
上传用户:lbr_007
上传日期:2019-05-31
资源大小:282k
文件大小:5k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. // ClickListDLG.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "tiffsample.h"
  5. #include "TIFFFrame.h"
  6. #include "TIFFDoc.h"
  7. #include "TIFFView.h"
  8. #include "ClickListDLG.h"
  9. #include "RegPtDLG.h"
  10. using namespace std;
  11. extern TIFFView * g_view;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // ClickListDLG dialog
  14. ClickListDLG::ClickListDLG(CWnd* pParent /*=NULL*/)
  15. {
  16. //{{AFX_DATA_INIT(ClickListDLG)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. m_initialized = false;
  20. }
  21. void ClickListDLG::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialogBar::DoDataExchange(pDX);
  24. //{{AFX_DATA_MAP(ClickListDLG)
  25. DDX_Control(pDX, IDC_CLICKPT_LIST, m_list);
  26. //}}AFX_DATA_MAP
  27. }
  28. BEGIN_MESSAGE_MAP(ClickListDLG, CDialogBar)
  29. //{{AFX_MSG_MAP(ClickListDLG)
  30. ON_WM_SHOWWINDOW()
  31. ON_WM_SIZE()
  32. ON_NOTIFY(NM_CLICK, IDC_CLICKPT_LIST, OnClickClickptList)
  33. ON_NOTIFY(LVN_KEYDOWN, IDC_CLICKPT_LIST, OnKeydownClickptList)
  34. ON_NOTIFY(NM_DBLCLK, IDC_CLICKPT_LIST, OnDblclkClickptList)
  35. //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37. /////////////////////////////////////////////////////////////////////////////
  38. // ClickListDLG message handlers
  39. void ClickListDLG::OnShowWindow(BOOL bShow, UINT nStatus) 
  40. {
  41. CDialogBar::OnShowWindow(bShow, nStatus);
  42. if (m_hWnd && g_view)
  43. {
  44. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  45. if (list)
  46. {
  47. if (!m_initialized)
  48. {
  49. InitializeList();
  50. }
  51. UpdateList();
  52. }
  53. }
  54. }
  55. void ClickListDLG::InitializeList(void)
  56. {
  57. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  58. if (list)
  59. {
  60. if (!m_initialized)
  61. {
  62. list->InsertColumn(0,_T(""),LVCFMT_CENTER,100);
  63. list->InsertColumn(1,_T(""),LVCFMT_CENTER,100);
  64. list->InsertColumn(2,_T(""),LVCFMT_CENTER,100);
  65. list->InsertColumn(3,_T(""),LVCFMT_CENTER,100);
  66. list->ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|WS_HSCROLL|WS_VSCROLL);
  67. ListView_SetExtendedListViewStyle 
  68. ((HWND)*list, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
  69. m_initialized = true;
  70. }
  71. }
  72. }
  73. void ClickListDLG::OnSize(UINT nType, int cx, int cy) 
  74. {
  75. CDialogBar::OnSize(nType, cx, cy);
  76. if ((cx > 0) && (cy > 0))
  77. {
  78. if (m_hWnd && g_view)
  79. {
  80. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  81. if (list)
  82. {
  83. if (!m_initialized)
  84. {
  85. InitializeList();
  86. }
  87. CRect r;
  88. GetClientRect(&r);
  89. const borderSize = 7;
  90. r.left += borderSize;
  91. r.top += borderSize;
  92. r.bottom -= borderSize;
  93. r.right -= borderSize;
  94. list->MoveWindow(&r);
  95. }
  96. }
  97. }
  98. }
  99. void ClickListDLG::UpdateList(void)
  100. {
  101. if (m_hWnd)
  102. {
  103. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  104. if (list)
  105. {
  106. char txt[24];
  107. string s;
  108. list->DeleteAllItems();
  109. vector<ClickPoint>& pts = g_view->GetClickPoints();
  110. int size = pts.size();
  111. for (int i = 0; i < size; i++){
  112. list->InsertItem(i,pts[i].m_name.c_str(), 0);
  113. GeoCalc::EncodeLatitude(pts[i].m_lat, s);
  114. list->SetItemText(i, 1, s.c_str());
  115. GeoCalc::EncodeLongitude(pts[i].m_lon, s);
  116. list->SetItemText(i, 2, s.c_str());
  117. sprintf(txt,"%.1f",pts[i].m_alt);
  118. list->SetItemText(i, 3, txt);
  119. }
  120. }
  121. }
  122. }
  123. void ClickListDLG::OnClickClickptList(NMHDR* pNMHDR, LRESULT* pResult) 
  124. {
  125. *pResult = 0;
  126. }
  127. void ClickListDLG::OnDblclkClickptList(NMHDR* pNMHDR, LRESULT* pResult) 
  128. {
  129. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  130. if (list)
  131. {
  132. int ndx = list->GetNextItem( -1, LVNI_SELECTED );
  133. if (ndx >= 0 && ndx < list->GetItemCount())
  134. {
  135. if (g_view)
  136. {
  137. vector<ClickPoint>& pts = g_view->GetClickPoints();
  138. RegPtDLG dlg;
  139. dlg.SetPosition(pts[ndx].m_lat, pts[ndx].m_lon, pts[ndx].m_alt);
  140. dlg.SetName(pts[ndx].m_name.c_str());
  141. if (dlg.DoModal() == IDOK)
  142. {
  143. pts[ndx].m_lat = dlg.GetLat();
  144. pts[ndx].m_lon = dlg.GetLon();
  145. pts[ndx].m_alt = dlg.GetAltitude();
  146. pts[ndx].m_name = dlg.GetName();
  147. }
  148. UpdateList();
  149. }
  150. }
  151. }
  152. *pResult = 0;
  153. }
  154. void ClickListDLG::OnKeydownClickptList(NMHDR* pNMHDR, LRESULT* pResult) 
  155. {
  156. LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;
  157. CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
  158. if (list)
  159. {
  160. int ndx = list->GetNextItem( -1, LVNI_SELECTED );
  161. if (ndx >= 0 && ndx < list->GetItemCount())
  162. {
  163. INT32 keyChar = pLVKeyDown->wVKey;
  164. if (g_view && keyChar == 46)
  165. {
  166. if (AfxMessageBox("Are you sure you want to delete?",MB_ICONQUESTION|MB_YESNO) ==
  167. IDYES)
  168. {
  169. vector<ClickPoint>& pts = g_view->GetClickPoints();
  170. vector<ClickPoint>::iterator it = pts.begin();
  171. for (int i = 0; i < ndx; i++){
  172. it++;
  173. }
  174. pts.erase(it);
  175. UpdateList();
  176. if (pts.size() == 0)
  177. {
  178. ShowWindow(SW_HIDE);
  179. CWnd * wnd = GetParent();
  180. if (wnd)
  181. {
  182. wnd->PostMessage(WM_SIZE, 0, 0);
  183. }
  184. }
  185. }
  186. }
  187. }
  188. }
  189. *pResult = 0;
  190. }