ClickListDLG.cpp
上传用户:lbr_007
上传日期:2019-05-31
资源大小:282k
文件大小:5k
- // ClickListDLG.cpp : implementation file
- //
- #include "stdafx.h"
- #include "tiffsample.h"
- #include "TIFFFrame.h"
- #include "TIFFDoc.h"
- #include "TIFFView.h"
- #include "ClickListDLG.h"
- #include "RegPtDLG.h"
- using namespace std;
- extern TIFFView * g_view;
- /////////////////////////////////////////////////////////////////////////////
- // ClickListDLG dialog
- ClickListDLG::ClickListDLG(CWnd* pParent /*=NULL*/)
- {
- //{{AFX_DATA_INIT(ClickListDLG)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- m_initialized = false;
- }
- void ClickListDLG::DoDataExchange(CDataExchange* pDX)
- {
- CDialogBar::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(ClickListDLG)
- DDX_Control(pDX, IDC_CLICKPT_LIST, m_list);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(ClickListDLG, CDialogBar)
- //{{AFX_MSG_MAP(ClickListDLG)
- ON_WM_SHOWWINDOW()
- ON_WM_SIZE()
- ON_NOTIFY(NM_CLICK, IDC_CLICKPT_LIST, OnClickClickptList)
- ON_NOTIFY(LVN_KEYDOWN, IDC_CLICKPT_LIST, OnKeydownClickptList)
- ON_NOTIFY(NM_DBLCLK, IDC_CLICKPT_LIST, OnDblclkClickptList)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // ClickListDLG message handlers
- void ClickListDLG::OnShowWindow(BOOL bShow, UINT nStatus)
- {
- CDialogBar::OnShowWindow(bShow, nStatus);
-
- if (m_hWnd && g_view)
- {
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- if (!m_initialized)
- {
- InitializeList();
- }
- UpdateList();
- }
- }
- }
- void ClickListDLG::InitializeList(void)
- {
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- if (!m_initialized)
- {
- list->InsertColumn(0,_T(""),LVCFMT_CENTER,100);
- list->InsertColumn(1,_T(""),LVCFMT_CENTER,100);
- list->InsertColumn(2,_T(""),LVCFMT_CENTER,100);
- list->InsertColumn(3,_T(""),LVCFMT_CENTER,100);
- list->ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|WS_HSCROLL|WS_VSCROLL);
- ListView_SetExtendedListViewStyle
- ((HWND)*list, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
- m_initialized = true;
- }
- }
- }
- void ClickListDLG::OnSize(UINT nType, int cx, int cy)
- {
- CDialogBar::OnSize(nType, cx, cy);
-
- if ((cx > 0) && (cy > 0))
- {
- if (m_hWnd && g_view)
- {
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- if (!m_initialized)
- {
- InitializeList();
- }
- CRect r;
- GetClientRect(&r);
- const borderSize = 7;
- r.left += borderSize;
- r.top += borderSize;
- r.bottom -= borderSize;
- r.right -= borderSize;
- list->MoveWindow(&r);
- }
- }
- }
- }
- void ClickListDLG::UpdateList(void)
- {
- if (m_hWnd)
- {
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- char txt[24];
- string s;
- list->DeleteAllItems();
- vector<ClickPoint>& pts = g_view->GetClickPoints();
- int size = pts.size();
- for (int i = 0; i < size; i++){
- list->InsertItem(i,pts[i].m_name.c_str(), 0);
- GeoCalc::EncodeLatitude(pts[i].m_lat, s);
- list->SetItemText(i, 1, s.c_str());
- GeoCalc::EncodeLongitude(pts[i].m_lon, s);
- list->SetItemText(i, 2, s.c_str());
- sprintf(txt,"%.1f",pts[i].m_alt);
- list->SetItemText(i, 3, txt);
- }
- }
- }
- }
- void ClickListDLG::OnClickClickptList(NMHDR* pNMHDR, LRESULT* pResult)
- {
- *pResult = 0;
- }
- void ClickListDLG::OnDblclkClickptList(NMHDR* pNMHDR, LRESULT* pResult)
- {
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- int ndx = list->GetNextItem( -1, LVNI_SELECTED );
- if (ndx >= 0 && ndx < list->GetItemCount())
- {
- if (g_view)
- {
- vector<ClickPoint>& pts = g_view->GetClickPoints();
-
- RegPtDLG dlg;
- dlg.SetPosition(pts[ndx].m_lat, pts[ndx].m_lon, pts[ndx].m_alt);
- dlg.SetName(pts[ndx].m_name.c_str());
- if (dlg.DoModal() == IDOK)
- {
- pts[ndx].m_lat = dlg.GetLat();
- pts[ndx].m_lon = dlg.GetLon();
- pts[ndx].m_alt = dlg.GetAltitude();
- pts[ndx].m_name = dlg.GetName();
- }
- UpdateList();
- }
- }
- }
-
- *pResult = 0;
- }
- void ClickListDLG::OnKeydownClickptList(NMHDR* pNMHDR, LRESULT* pResult)
- {
- LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;
- CListCtrl * list = (CListCtrl *)GetDlgItem(IDC_CLICKPT_LIST);
- if (list)
- {
- int ndx = list->GetNextItem( -1, LVNI_SELECTED );
- if (ndx >= 0 && ndx < list->GetItemCount())
- {
- INT32 keyChar = pLVKeyDown->wVKey;
- if (g_view && keyChar == 46)
- {
- if (AfxMessageBox("Are you sure you want to delete?",MB_ICONQUESTION|MB_YESNO) ==
- IDYES)
- {
- vector<ClickPoint>& pts = g_view->GetClickPoints();
- vector<ClickPoint>::iterator it = pts.begin();
- for (int i = 0; i < ndx; i++){
- it++;
- }
- pts.erase(it);
- UpdateList();
- if (pts.size() == 0)
- {
- ShowWindow(SW_HIDE);
- CWnd * wnd = GetParent();
- if (wnd)
- {
- wnd->PostMessage(WM_SIZE, 0, 0);
- }
- }
- }
- }
- }
- }
-
- *pResult = 0;
- }