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++
554 lines
14 KiB
C++
// DlgMarker.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "DlgMarker.h"
|
|
#include "afxdialogex.h"
|
|
|
|
|
|
// CDlgMarker 对话框
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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 消息处理程序
|
|
|
|
|
|
BOOL CDlgMarker::OnInitDialog()
|
|
{
|
|
CBCGPDialog::OnInitDialog();
|
|
|
|
m_strMarkerConfig = GetSoftwareCurrentDirectory() + _T("\\Markers.ini");
|
|
|
|
m_treeMarkers.SetBkColor(RGB(53,53,57)); //设置为与对话框背景颜色一致
|
|
m_treeMarkers.SetTextColor(RGB(255,255,255)); //设置树控件文本颜色
|
|
|
|
//读取标记点配置文件(删去名称为空的标记点),更新树控件
|
|
RewriteMarkerConfig();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//展开所有的子根节点
|
|
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);
|
|
}
|
|
|
|
//功能:移动对话框到给定的显示区域
|
|
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*/ );
|
|
}
|
|
|
|
//在地图上选择标记点
|
|
void CDlgMarker::OnBnClickedButtonSelectMarker()
|
|
{
|
|
g_bSelectMarker = true;
|
|
::PostMessage(g_mapHwnd, WM_SEND_MAPCURSORMODE, 4, 0); //设置Map CurMode为None
|
|
}
|
|
|
|
//显示标记点坐标到编辑框
|
|
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);
|
|
}
|
|
|
|
//添加标记点
|
|
void CDlgMarker::OnBnClickedButtonAddMarker()
|
|
{
|
|
//最多支持20个标记点
|
|
if (g_iHaveMarkedPts >= 120)
|
|
{
|
|
BCGPMessageBoxEx(NULL,_T("最多支持120个标记点!"),_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);
|
|
|
|
//在地图上显示标记点
|
|
::PostMessage(g_mapHwnd, WM_SEND_DRAWMARKER, g_iHaveMarkedPts-1, 0);
|
|
|
|
//标记点写配置文件
|
|
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);
|
|
|
|
//插入节点
|
|
HTREEITEM hItem;
|
|
hItem = m_treeMarkers.InsertItem(strTitle, 1, 1, m_treeMarkers.GetRootItem(), TVI_LAST);
|
|
m_treeMarkers.SetItemData(hItem, g_iHaveMarkedPts);
|
|
|
|
//选中节点
|
|
m_treeMarkers.SetCheck(hItem, TRUE);
|
|
|
|
//焦点移到节点上
|
|
m_treeMarkers.SelectItem(hItem);
|
|
m_treeMarkers.SetFocus();
|
|
|
|
//获取选中节点的索引
|
|
m_iSelectedIndex = m_treeMarkers.GetItemData(hItem);
|
|
}
|
|
|
|
//读取标记点配置文件(删去名称为空的标记点),更新树控件
|
|
void CDlgMarker::RewriteMarkerConfig()
|
|
{
|
|
g_iHaveMarkedPts = 0;
|
|
|
|
CString str, strTitle;
|
|
|
|
//读取配置文件中的所有标记点信息(名称为空的除外)
|
|
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);
|
|
}
|
|
}
|
|
|
|
//将读取的标记信息写进配置文件(目的是筛去空的标记点)
|
|
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);
|
|
}
|
|
|
|
//剩余的标记点信息置空
|
|
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);
|
|
}
|
|
|
|
//树控件删除所有节点
|
|
m_treeMarkers.DeleteAllItems();
|
|
|
|
//插入根节点
|
|
HTREEITEM hRoot;
|
|
hRoot = m_treeMarkers.InsertItem(_T("标记点"), 0, 0);
|
|
|
|
//设置根节点数据,可以用来代表节点索引
|
|
m_treeMarkers.SetItemData(hRoot, 0);
|
|
|
|
//插入子节点(标记点名称)
|
|
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);
|
|
|
|
//设置子节点数据,可以用来代表节点索引
|
|
m_treeMarkers.SetItemData(hChild, i+1);
|
|
}
|
|
|
|
//展开所有根节点
|
|
MyExpandTree(m_treeMarkers.GetRootItem());
|
|
}
|
|
|
|
//删除选中的标记点
|
|
void CDlgMarker::OnBnClickedButtonDeleteMarker()
|
|
{
|
|
if (m_iSelectedIndex == 0) //删除所有标记点
|
|
{
|
|
//确认是否删除所有标记点
|
|
if (IDYES != BCGPMessageBoxEx(NULL, _T("确认删除所有标记点?"), _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) //删除选中的标记点
|
|
{
|
|
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;
|
|
}
|
|
|
|
//单击树控件的响应事件函数
|
|
void CDlgMarker::OnNMClickTreeMarkers(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
//获取当前鼠标点击消息的坐标点
|
|
CPoint pt = GetCurrentMessage()->pt;
|
|
|
|
//转换成树控件的客户区坐标
|
|
m_treeMarkers.ScreenToClient(&pt);
|
|
|
|
UINT uFlags = 0;
|
|
|
|
//获取鼠标点击坐标处的节点
|
|
HTREEITEM hItem = m_treeMarkers.HitTest(pt, &uFlags);
|
|
|
|
if ((hItem != nullptr) && (TVHT_ONITEMSTATEICON & uFlags)) //鼠标点击节点复选框
|
|
{
|
|
//选中该节点
|
|
m_treeMarkers.SelectItem(hItem);
|
|
|
|
//获取点击前节点的选中状态
|
|
BOOL bCheck = m_treeMarkers.GetCheck(hItem);
|
|
|
|
SetChildCheck(hItem, !bCheck);
|
|
SetParentCheck(hItem, !bCheck);
|
|
|
|
//获取选中节点的数据
|
|
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);
|
|
|
|
//根据选中状态显示或隐藏标记点
|
|
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(""))
|
|
{
|
|
//根据选中状态显示或隐藏标记点
|
|
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)) //鼠标点击节点名称
|
|
{
|
|
//选中该节点
|
|
m_treeMarkers.SelectItem(hItem);
|
|
|
|
//获取选中节点的数据
|
|
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);
|
|
|
|
//当前节点置为选中状态
|
|
m_treeMarkers.SetCheck(hItem, TRUE);
|
|
|
|
SetChildCheck(hItem, TRUE);
|
|
SetParentCheck(hItem, TRUE);
|
|
|
|
//显示当前选中标记点
|
|
::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;
|
|
}
|
|
|
|
//设置某节点的子节点的选中状态
|
|
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);
|
|
}
|
|
}
|
|
|
|
//设置某节点的父节点的选中状态
|
|
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));
|
|
}
|
|
|