You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

554 lines
14 KiB
C++

2 years ago
// DlgMarker.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "DlgMarker.h"
#include "afxdialogex.h"
// CDlgMarker <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CDlgMarker, CBCGPDialog)
CDlgMarker::CDlgMarker(CWnd* pParent /*=NULL*/)
: CBCGPDialog(CDlgMarker::IDD, pParent)
{
EnableVisualManagerStyle(TRUE, TRUE);
m_iSelectedIndex = -1;
for (int i=0;i<g_iMarkerPtNum;++i)
{
g_lMarkerLayerID[i] = -1;
}
2 years ago
}
CDlgMarker::~CDlgMarker()
{
}
void CDlgMarker::DoDataExchange(CDataExchange* pDX)
{
CBCGPDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE_MARKERS, m_treeMarkers);
}
BEGIN_MESSAGE_MAP(CDlgMarker, CBCGPDialog)
ON_BN_CLICKED(IDC_BUTTON_SELECTMARKER, &CDlgMarker::OnBnClickedButtonSelectMarker)
ON_BN_CLICKED(IDC_BUTTON_ADDMARKER, &CDlgMarker::OnBnClickedButtonAddMarker)
ON_BN_CLICKED(IDC_BUTTON_DELETEMARKER, &CDlgMarker::OnBnClickedButtonDeleteMarker)
ON_NOTIFY(NM_CLICK, IDC_TREE_MARKERS, &CDlgMarker::OnNMClickTreeMarkers)
END_MESSAGE_MAP()
// CDlgMarker <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CDlgMarker::OnInitDialog()
{
CBCGPDialog::OnInitDialog();
m_strMarkerConfig = GetSoftwareCurrentDirectory() + _T("\\Markers.ini");
m_treeMarkers.SetBkColor(RGB(53,53,57)); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ի<EFBFBD><D4BB>򱳾<EFBFBD><F2B1B3BE><EFBFBD>ɫһ<C9AB><D2BB>
m_treeMarkers.SetTextColor(RGB(255,255,255)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>ı<EFBFBD><C4B1><EFBFBD>ɫ
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɾȥ<C9BE><C8A5><EFBFBD><EFBFBD>Ϊ<EFBFBD>յı<D5B5><C4B1>ǵ㣩<C7B5><E3A3A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
RewriteMarkerConfig();
return TRUE;
}
//չ<><D5B9><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>Ӹ<EFBFBD><D3B8>ڵ<EFBFBD>
void CDlgMarker::MyExpandTree(HTREEITEM hTreeItem)
{
HTREEITEM hNextItem = m_treeMarkers.GetNextItem(hTreeItem, TVGN_NEXT);
while (hNextItem != NULL)
{
MyExpandTree(hNextItem);
hNextItem = m_treeMarkers.GetNextItem(hNextItem, TVGN_NEXT);
}
m_treeMarkers.Expand(hTreeItem,TVE_EXPAND);
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>ƶ<EFBFBD><C6B6>Ի<EFBFBD><D4BB>򵽸<EFBFBD><F2B5BDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void CDlgMarker::MoveToGivenArea(const CRect rcArea)
{
CRect m_rcDlgArea;
m_rcDlgArea = rcArea;
m_rcDlgArea.top += 90;
SetWindowPos( &CWnd::wndTop, m_rcDlgArea.left, m_rcDlgArea.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE/* | SWP_HIDEWINDOW*/ );
}
//<2F>ڵ<EFBFBD>ͼ<EFBFBD><CDBC>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>
void CDlgMarker::OnBnClickedButtonSelectMarker()
{
g_bSelectMarker = true;
::PostMessage(g_mapHwnd, WM_SEND_MAPCURSORMODE, 4, 0); //<2F><><EFBFBD><EFBFBD>Map CurModeΪNone
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BCAD>
void CDlgMarker::ShowMarkerCoordinate(double& markerLon, double& markerLat)
{
CString str;
str.Format(_T("Marker%d"), g_iHaveMarkedPts+1);
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(str);
str.Format(_T("%.7f"), markerLon);
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(str);
str.Format(_T("%.7f"), markerLat);
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(str);
}
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1>ǵ<EFBFBD>
void CDlgMarker::OnBnClickedButtonAddMarker()
{
//<2F><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>20<32><30><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>
if (g_iHaveMarkedPts >= 20)
{
BCGPMessageBoxEx(NULL,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>20<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>!"),_T("Tip"),MB_OK,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US));
return ;
}
g_iHaveMarkedPts++;
CString str;
GetDlgItem(IDC_EDIT_MARKER_NAME)->GetWindowText(str);
g_iMarkerName[g_iHaveMarkedPts-1] = str;
GetDlgItem(IDC_EDIT_MARKER_LON)->GetWindowText(str);
g_iMarkerLon[g_iHaveMarkedPts-1] = atof(str);
GetDlgItem(IDC_EDIT_MARKER_LAT)->GetWindowText(str);
g_iMarkerLat[g_iHaveMarkedPts-1] = atof(str);
//<2F>ڵ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ǵ<EFBFBD>
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, g_iHaveMarkedPts-1, 0);
//<2F><><EFBFBD>ǵ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
CString strTitle;
strTitle.Format(_T("Marker%d"),g_iHaveMarkedPts);
str.Format(_T("%s"), g_iMarkerName[g_iHaveMarkedPts-1]);
WritePrivateProfileString(strTitle,_T("Name"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLon[g_iHaveMarkedPts-1]);
WritePrivateProfileString(strTitle,_T("Lon"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLat[g_iHaveMarkedPts-1]);
WritePrivateProfileString(strTitle,_T("Lat"),str,m_strMarkerConfig);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
HTREEITEM hItem;
hItem = m_treeMarkers.InsertItem(strTitle, 1, 1, m_treeMarkers.GetRootItem(), TVI_LAST);
m_treeMarkers.SetItemData(hItem, g_iHaveMarkedPts);
//ѡ<>нڵ<D0BD>
m_treeMarkers.SetCheck(hItem, TRUE);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ڵ<EFBFBD><DAB5><EFBFBD>
m_treeMarkers.SelectItem(hItem);
m_treeMarkers.SetFocus();
//<2F><>ȡѡ<C8A1>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_iSelectedIndex = m_treeMarkers.GetItemData(hItem);
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɾȥ<C9BE><C8A5><EFBFBD><EFBFBD>Ϊ<EFBFBD>յı<D5B5><C4B1>ǵ㣩<C7B5><E3A3A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
void CDlgMarker::RewriteMarkerConfig()
{
g_iHaveMarkedPts = 0;
CString str, strTitle;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ǵ<EFBFBD><C7B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>յij<D5B5><C4B3>
for (int i=0;i<g_iMarkerPtNum;i++)
{
g_lMarkerLayerID[i] = -1;
strTitle.Format(_T("Marker%d"),i+1);
TCHAR inBuf[30];
CString sLon, sLat;
GetPrivateProfileString(strTitle,_T("Lon"),0,inBuf,20,m_strMarkerConfig);
sLon.Format(_T("%s"), inBuf);
GetPrivateProfileString(strTitle,_T("Lat"),0,inBuf,20,m_strMarkerConfig);
sLat.Format(_T("%s"), inBuf);
if ((sLon != _T("")) && (sLat != _T("")))
{
g_iHaveMarkedPts++;
GetPrivateProfileString(strTitle,_T("Name"),0,inBuf,20,m_strMarkerConfig);
g_iMarkerName[g_iHaveMarkedPts-1].Format(_T("%s"), inBuf);
GetPrivateProfileString(strTitle,_T("Lon"),0,inBuf,20,m_strMarkerConfig);
g_iMarkerLon[g_iHaveMarkedPts-1] = atof(inBuf);
GetPrivateProfileString(strTitle,_T("Lat"),0,inBuf,20,m_strMarkerConfig);
g_iMarkerLat[g_iHaveMarkedPts-1] = atof(inBuf);
}
}
//<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>Ϣд<CFA2><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ɸȥ<C9B8>յı<D5B5><C4B1>ǵ㣩
for (int i=0;i<g_iHaveMarkedPts;i++)
{
strTitle.Format(_T("Marker%d"),i+1);
str.Format(_T("%s"), g_iMarkerName[i]);
WritePrivateProfileString(strTitle,_T("Name"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLon[i]);
WritePrivateProfileString(strTitle,_T("Lon"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLat[i]);
WritePrivateProfileString(strTitle,_T("Lat"),str,m_strMarkerConfig);
}
//ʣ<><CAA3><EFBFBD>ı<EFBFBD><C4B1>ǵ<EFBFBD><C7B5><EFBFBD>Ϣ<EFBFBD>ÿ<EFBFBD>
for (int i=g_iHaveMarkedPts;i<g_iMarkerPtNum;i++)
{
strTitle.Format(_T("Marker%d"),i+1);
WritePrivateProfileString(strTitle,_T("Name"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lon"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lat"),_T(""),m_strMarkerConfig);
}
//<2F><><EFBFBD>ؼ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD>
m_treeMarkers.DeleteAllItems();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
HTREEITEM hRoot;
hRoot = m_treeMarkers.InsertItem(_T("<EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>"), 0, 0);
//<2F><><EFBFBD>ø<EFBFBD><C3B8>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
m_treeMarkers.SetItemData(hRoot, 0);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӽڵ㣨<DAB5><E3A3A8><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ƣ<EFBFBD>
for (int i=0;i<g_iHaveMarkedPts;i++)
{
str.Format(_T("Marker%d"),i+1);
HTREEITEM hChild;
hChild = m_treeMarkers.InsertItem(str, 1, 1, hRoot, TVI_LAST);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
m_treeMarkers.SetItemData(hChild, i+1);
}
//չ<><D5B9><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8>ڵ<EFBFBD>
MyExpandTree(m_treeMarkers.GetRootItem());
}
//ɾ<><C9BE>ѡ<EFBFBD>еı<D0B5><C4B1>ǵ<EFBFBD>
void CDlgMarker::OnBnClickedButtonDeleteMarker()
{
if (m_iSelectedIndex == 0) //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ǵ<EFBFBD>
{
//ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ǵ<EFBFBD>
if (IDYES != BCGPMessageBoxEx(NULL, _T("ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>ǵ<EFBFBD>?"), _T("Tip"), MB_YESNO,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US)))
{
return;
}
HTREEITEM item = m_treeMarkers.GetChildItem(m_treeMarkers.GetRootItem());
while (item)
{
m_iSelectedIndex = m_treeMarkers.GetItemData(item);
g_iMarkerName[m_iSelectedIndex-1] = _T("");
g_iMarkerLon[m_iSelectedIndex-1] = 0;
g_iMarkerLat[m_iSelectedIndex-1] = 0;
CString strTitle;
strTitle.Format(_T("Marker%d"),m_iSelectedIndex);
WritePrivateProfileString(strTitle,_T("Name"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lon"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lat"),_T(""),m_strMarkerConfig);
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, m_iSelectedIndex-1, 1);
HTREEITEM childItem = m_treeMarkers.GetNextItem(item, TVGN_NEXT);
m_treeMarkers.DeleteItem(item);
item = childItem;
}
g_iHaveMarkedPts = 0;
}
else if (m_iSelectedIndex > 0) //ɾ<><C9BE>ѡ<EFBFBD>еı<D0B5><C4B1>ǵ<EFBFBD>
{
CString strTitle, str;
for (int i=m_iSelectedIndex;i<g_iHaveMarkedPts;i++)
{
//g_iMarkerName[i-1] = g_iMarkerName[i];
g_iMarkerLon[i-1] = g_iMarkerLon[i];
g_iMarkerLat[i-1] = g_iMarkerLat[i];
g_bMarkerPlot[i-1] = g_bMarkerPlot[i];
if (g_bMarkerPlot[i-1])
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, i-1, 0);
}
else
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, i-1, 1);
}
strTitle.Format(_T("Marker%d"),i);
str.Format(_T("%s"), g_iMarkerName[i-1]);
WritePrivateProfileString(strTitle,_T("Name"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLon[i-1]);
WritePrivateProfileString(strTitle,_T("Lon"),str,m_strMarkerConfig);
str.Format(_T("%.7f"), g_iMarkerLat[i-1]);
WritePrivateProfileString(strTitle,_T("Lat"),str,m_strMarkerConfig);
}
g_iMarkerName[g_iHaveMarkedPts-1] = _T("");
g_iMarkerLon[g_iHaveMarkedPts-1] = 0;
g_iMarkerLat[g_iHaveMarkedPts-1] = 0;
g_bMarkerPlot[g_iHaveMarkedPts-1] = false;
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, g_iHaveMarkedPts-1, 1);
strTitle.Format(_T("Marker%d"),g_iHaveMarkedPts);
WritePrivateProfileString(strTitle,_T("Name"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lon"),_T(""),m_strMarkerConfig);
WritePrivateProfileString(strTitle,_T("Lat"),_T(""),m_strMarkerConfig);
m_treeMarkers.DeleteItem(m_treeMarkers.GetSelectedItem());
g_iHaveMarkedPts--;
{
HTREEITEM item = m_treeMarkers.GetChildItem(m_treeMarkers.GetRootItem());
int _iIndex = 0;
while (item)
{
_iIndex++;
m_treeMarkers.SetItemData(item, _iIndex);
str.Format(_T("Marker%d"), _iIndex);
m_treeMarkers.SetItemText(item, str);
item = m_treeMarkers.GetNextItem(item, TVGN_NEXT);
}
}
}
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(_T(""));
m_iSelectedIndex = -1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
void CDlgMarker::OnNMClickTreeMarkers(NMHDR *pNMHDR, LRESULT *pResult)
{
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPoint pt = GetCurrentMessage()->pt;
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>Ŀͻ<C4BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_treeMarkers.ScreenToClient(&pt);
UINT uFlags = 0;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<C4BD>
HTREEITEM hItem = m_treeMarkers.HitTest(pt, &uFlags);
if ((hItem != nullptr) && (TVHT_ONITEMSTATEICON & uFlags)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㸴ѡ<E3B8B4><D1A1>
{
//ѡ<>иýڵ<C3BD>
m_treeMarkers.SelectItem(hItem);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ѡ<EFBFBD><D1A1>״̬
BOOL bCheck = m_treeMarkers.GetCheck(hItem);
SetChildCheck(hItem, !bCheck);
SetParentCheck(hItem, !bCheck);
//<2F><>ȡѡ<C8A1>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_iSelectedIndex = m_treeMarkers.GetItemData(hItem);
if (m_iSelectedIndex > 0)
{
CString str;
str.Format(_T("%s"), g_iMarkerName[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(str);
str.Format(_T("%.7f"), g_iMarkerLon[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(str);
str.Format(_T("%.7f"), g_iMarkerLat[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(str);
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>״̬<D7B4><CCAC>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>ǵ<EFBFBD>
if (!bCheck)
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, m_iSelectedIndex-1, 0);
}
else
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, m_iSelectedIndex-1, 1);
}
}
else if (m_iSelectedIndex == 0)
{
for (int i=0;i<g_iHaveMarkedPts;i++)
{
//if (g_iMarkerName[i] != _T(""))
{
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>״̬<D7B4><CCAC>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>ǵ<EFBFBD>
if (!bCheck)
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, i, 0);
}
else
{
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, i, 1);
}
}
}
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(_T(""));
}
}
else if ((hItem != nullptr) && (TVHT_ONITEMLABEL & uFlags)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
{
//ѡ<>иýڵ<C3BD>
m_treeMarkers.SelectItem(hItem);
//<2F><>ȡѡ<C8A1>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_iSelectedIndex = m_treeMarkers.GetItemData(hItem);
if (m_iSelectedIndex > 0)
{
CString str;
str.Format(_T("%s"), g_iMarkerName[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(str);
str.Format(_T("%.7f"), g_iMarkerLon[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(str);
str.Format(_T("%.7f"), g_iMarkerLat[m_iSelectedIndex-1]);
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(str);
//<2F><>ǰ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ϊѡ<CEAA><D1A1>״̬
m_treeMarkers.SetCheck(hItem, TRUE);
SetChildCheck(hItem, TRUE);
SetParentCheck(hItem, TRUE);
//<2F><>ʾ<EFBFBD><CABE>ǰѡ<C7B0>б<EFBFBD><D0B1>ǵ<EFBFBD>
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, m_iSelectedIndex-1, 0);
}
else if (m_iSelectedIndex == 0)
{
GetDlgItem(IDC_EDIT_MARKER_NAME)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LON)->SetWindowText(_T(""));
GetDlgItem(IDC_EDIT_MARKER_LAT)->SetWindowText(_T(""));
}
}
*pResult = 0;
}
//<2F><><EFBFBD><EFBFBD>ij<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD>ѡ<EFBFBD><D1A1>״̬
void CDlgMarker::SetChildCheck(HTREEITEM item, BOOL bCheck)
{
HTREEITEM childItem = m_treeMarkers.GetChildItem(item);
while (childItem)
{
m_treeMarkers.SetCheck(childItem, bCheck);
SetChildCheck(childItem, bCheck);
childItem = m_treeMarkers.GetNextItem(childItem, TVGN_NEXT);
}
}
//<2F><><EFBFBD><EFBFBD>ij<EFBFBD>ڵ<EFBFBD><DAB5>ĸ<EFBFBD><C4B8>ڵ<EFBFBD><DAB5><EFBFBD>ѡ<EFBFBD><D1A1>״̬
void CDlgMarker::SetParentCheck(HTREEITEM item, BOOL bCheck)
{
HTREEITEM parent = m_treeMarkers.GetParentItem(item);
if (parent == NULL)
{
return ;
}
if (bCheck)
{
m_treeMarkers.SetCheck(parent, bCheck);
}
else
{
HTREEITEM bro = m_treeMarkers.GetNextItem(item, TVGN_NEXT);
bool bFlag = false;
while (bro)
{
if (m_treeMarkers.GetCheck(bro))
{
bFlag = true;
break;
}
bro = m_treeMarkers.GetNextItem(bro, TVGN_NEXT);
}
if (!bFlag)
{
bro = m_treeMarkers.GetNextItem(item, TVGN_PREVIOUS);
while (bro)
{
if (m_treeMarkers.GetCheck(bro))
{
bFlag = true;
break;
}
bro = m_treeMarkers.GetNextItem(bro, TVGN_PREVIOUS);
}
}
if (!bFlag)
{
m_treeMarkers.SetCheck(parent, false);
}
}
SetParentCheck(parent, m_treeMarkers.GetCheck(parent));
}