📄 dlglayermanager.cpp
字号:
// DlgLayerManager.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "DlgLayerManager.h"
#include "editor.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgLayerManager dialog
CDlgLayerManager::CDlgLayerManager(CWnd* pParent /*=NULL*/)
: CDialog(CDlgLayerManager::IDD, pParent)
{
//初始化变量
//{{AFX_DATA_INIT(CDlgLayerManager)
m_bEditable = FALSE;
m_bSelectable = FALSE;
m_bSnapable = FALSE;
m_bVisible = FALSE;
m_dMaxScale = 0.0;
m_dMinScale = 0.0;
//}}AFX_DATA_INIT
m_pMapWnd = NULL;
m_nCurRow = -1;
m_bLstClicked = true;
}
void CDlgLayerManager::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgLayerManager)
DDX_Control(pDX, IDC_LIST_LAYER, m_lstLayers);
DDX_Check(pDX, IDC_CHECK_EDITABLE, m_bEditable);
DDX_Check(pDX, IDC_CHECK_SELECTABLE, m_bSelectable);
DDX_Check(pDX, IDC_CHECK_SNAPABLE, m_bSnapable);
DDX_Check(pDX, IDC_CHECK_VISIBLE, m_bVisible);
DDX_Text(pDX, IDC_EDIT_MAXSCALE, m_dMaxScale);
DDX_Text(pDX, IDC_EDIT_MINSCALE, m_dMinScale);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgLayerManager, CDialog)
//{{AFX_MSG_MAP(CDlgLayerManager)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_BN_CLICKED(IDC_CHECK_SELECTABLE, OnCheckSelectable)
ON_BN_CLICKED(IDC_CHECK_SNAPABLE, OnCheckSnapable)
ON_BN_CLICKED(IDC_CHECK_VISIBLE, OnCheckVisible)
ON_NOTIFY(NM_CLICK, IDC_LIST_LAYER, OnClickListLayer)
ON_EN_KILLFOCUS(IDC_EDIT_MINSCALE, OnKillfocusEditMinscale)
ON_EN_KILLFOCUS(IDC_EDIT_MAXSCALE, OnKillfocusEditMaxscale)
ON_BN_CLICKED(IDC_BUTTON_MOVE_TOP, OnButtonMoveTop)
ON_BN_CLICKED(IDC_BUTTON_MOVE_UP, OnButtonMoveUp)
ON_BN_CLICKED(IDC_BUTTON_MOVE_DOWN, OnButtonMoveDown)
ON_BN_CLICKED(IDC_BUTTON_MOVE_BOTTOM, OnButtonMoveBottom)
ON_EN_SETFOCUS(IDC_EDIT_MINSCALE, OnSetfocusEditMinscale)
ON_EN_SETFOCUS(IDC_EDIT_MAXSCALE, OnSetfocusEditMaxscale)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgLayerManager message handlers
BOOL CDlgLayerManager::FillList()
{
if(!m_lstLayers.DeleteAllItems())
{
return false;
}
CRect rc;
m_lstLayers.GetClientRect(&rc);
m_lstLayers.InsertColumn(0,_T(""),LVCFMT_LEFT,rc.Width());
//将地图中的图层加入到图层列表框中
int nCount = m_pMapWnd->GetLayerCount();
for(int i = 0;i< nCount;i++)
{
//获取地图名
CString str = m_pMapWnd->GetLayerAt(i)->m_strLayerName;
//添加
m_lstLayers.InsertItem( i,str);
}
return true;
}
void CDlgLayerManager::OnButtonDelete()
{
//删除一个图层
POSITION pos = m_lstLayers.GetFirstSelectedItemPosition();
int nItem = m_lstLayers.GetNextSelectedItem(pos);
m_pMapWnd->RemoveLayerAt(nItem);
FillList();
}
void CDlgLayerManager::OnCheckSelectable()
{//设置图层是否可选择
UpdateData(true);
UINT uSelectedCount = m_lstLayers.GetSelectedCount();
int nItem = -1 ;
for (int i=0;i <uSelectedCount;i++)
{
nItem = m_lstLayers.GetNextItem(nItem, LVNI_SELECTED);
if(nItem!=-1)
{
m_pMapWnd->GetLayerAt(nItem)->SetSelectable(m_bSelectable);
}
}
}
void CDlgLayerManager::OnCheckSnapable()
{//设置图层是否可捕捉
UpdateData(true);
UINT uSelectedCount = m_lstLayers.GetSelectedCount();
int nItem = -1 ;
for (int i=0;i <uSelectedCount;i++)
{
nItem = m_lstLayers.GetNextItem(nItem, LVNI_SELECTED);
if(nItem!=-1)
{
m_pMapWnd->GetLayerAt(nItem)->SetSnapable(m_bSnapable);
}
}
}
void CDlgLayerManager::OnCheckVisible()
{//设置图层是否可见
UpdateData(true);
UINT uSelectedCount = m_lstLayers.GetSelectedCount();
int nItem = -1 ;
for (int i=0;i< uSelectedCount;i++)
{
nItem = m_lstLayers.GetNextItem(nItem, LVNI_SELECTED);
if(nItem!=-1)
{
m_pMapWnd->GetLayerAt(nItem)->SetVisible(m_bVisible);
}
}
}
void CDlgLayerManager::OnClickListLayer(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pList = (NM_LISTVIEW*)pNMHDR;
if(pList->iItem > -1)
{
int nItem = pList->iItem;
SetMoveButtonState(nItem);
//设置浮选框的状态
m_bVisible=m_pMapWnd->GetLayerAt(nItem)->IsVisible();
m_bEditable=m_pMapWnd->GetLayerAt(nItem)->IsEditable();
m_bSelectable=m_pMapWnd->GetLayerAt(nItem)->IsSelectable();
m_bSnapable=m_pMapWnd->GetLayerAt(nItem)->IsSnapable();
UpdateData(FALSE);
//设置显示比例的状态
m_dMaxScale = m_pMapWnd->GetLayerAt(nItem)->m_dVisibleScaleMax;
if((m_nCurRow > -1) && !m_bLstClicked)
{
OnKillfocusEditMaxscale();
OnKillfocusEditMinscale();
m_bLstClicked = true;
}
if(!IS0(m_dMaxScale))
{
m_dMaxScale = 1.0/m_dMaxScale;
}
else
{
m_dMaxScale = 0;
}
m_dMinScale = m_pMapWnd->GetLayerAt(nItem)->m_dVisibleScaleMin;
if(!IS0(m_dMinScale))
{
m_dMinScale = 1.0/m_dMinScale;
}
else
{
m_dMaxScale = 0;
}
m_nCurRow = nItem;
UpdateData(FALSE);
}
*pResult = 0;
}
BOOL CDlgLayerManager::OnInitDialog()
{//初始化
CDialog::OnInitDialog();
if( !m_pMapWnd )
{
EndDialog(-1);
}
FillList();
return TRUE;
}
void CDlgLayerManager::OnKillfocusEditMinscale()
{
UpdateData(true);
if((m_nCurRow > - 1) && !m_bLstClicked )
{
double dScale = m_dMinScale;
if(!IS0(dScale))
{
dScale = 1.0/dScale;
}
else
{
dScale = 0;
}
m_pMapWnd->GetLayerAt(m_nCurRow)->m_dVisibleScaleMin = dScale;
}
}
void CDlgLayerManager::OnKillfocusEditMaxscale()
{
UpdateData(true);
if((m_nCurRow > - 1) && !m_bLstClicked )
{
double dScale = m_dMaxScale;
if(!IS0(dScale))
{
dScale = 1.0/dScale;
}
else
{
dScale = 0;
}
m_pMapWnd->GetLayerAt(m_nCurRow)->m_dVisibleScaleMax = dScale;
}
}
void CDlgLayerManager::OnButtonMoveTop()
{
//响应移至顶层按钮
POSITION pos = m_lstLayers.GetFirstSelectedItemPosition();
int nItem = m_lstLayers.GetNextSelectedItem(pos);
//将当前层移到顶层
m_pMapWnd->MoveTop(nItem);
//重新设置对话框图层列表和移动按钮的状态
if(FillList())
{
int nCount=0;
m_lstLayers.SetItemState(nCount ,LVIS_SELECTED,LVIS_SELECTED);
m_lstLayers.EnsureVisible(nCount ,0);
this->SetMoveButtonState(nCount );
}
}
void CDlgLayerManager::OnButtonMoveUp()
{
//响应上移一层按钮
POSITION pos = m_lstLayers.GetFirstSelectedItemPosition();
int nItem = m_lstLayers.GetNextSelectedItem(pos);
if (nItem == -1) return;
//上移一层
m_pMapWnd->MoveUp(nItem);
//重新设置对话框图层列表和移动按钮的状态
if(FillList())
{
int nCount=nItem-1;
if(nCount>=0)
{
m_lstLayers.SetItemState(nCount ,LVIS_SELECTED,LVIS_SELECTED);
m_lstLayers.EnsureVisible(nCount ,0);
this->SetMoveButtonState(nCount);
}
}
}
void CDlgLayerManager::OnButtonMoveDown()
{
POSITION pos = m_lstLayers.GetFirstSelectedItemPosition();
int nItem = m_lstLayers.GetNextSelectedItem(pos);
//下移一层
m_pMapWnd->MoveDown(nItem);
//重新设置对话框图层列表和移动按钮的状态
if(FillList())
{
int nCount=nItem+1;
m_lstLayers.SetItemState(nCount ,LVIS_SELECTED,LVIS_SELECTED);
m_lstLayers.EnsureVisible(nCount ,0);
this->SetMoveButtonState(nCount );
}
}
void CDlgLayerManager::OnButtonMoveBottom()
{
//响应移至底层按钮
POSITION pos = m_lstLayers.GetFirstSelectedItemPosition();
int nItem = m_lstLayers.GetNextSelectedItem(pos);
//移至底层
m_pMapWnd->MoveBottom(nItem);
//重新设置对话框图层列表和移动按钮的状态
if(FillList())
{
int nCount=m_lstLayers.GetItemCount();
m_lstLayers.SetItemState(nCount - 1,LVIS_SELECTED,LVIS_SELECTED);
m_lstLayers.EnsureVisible(nCount - 1,0);
this->SetMoveButtonState(nCount - 1);
}
}
void CDlgLayerManager::OnSetfocusEditMinscale()
{
m_bLstClicked = false;
}
void CDlgLayerManager::OnSetfocusEditMaxscale()
{
m_bLstClicked = false;
}
void CDlgLayerManager::OnOK()
{
//保存地图
CSeMapDef mapDef;
m_pMapWnd->SaveToMap(mapDef);
theApp.m_WorkSpace.GetMaps()->SetMap(mapDef.m_strMapName,mapDef);
m_pMapWnd->Refresh();
CDialog::OnOK();
}
void CDlgLayerManager::SetMoveButtonState(int nRow)
{
//设置移动按钮的状态
CButton *pButton = NULL;
CEdit *pEdit = NULL;
if( m_lstLayers.GetSelectedCount()>1) //选中第一行
{
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_TOP);
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_UP);
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_DOWN);
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_BOTTOM);
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_DELETE);
pButton->EnableWindow(false);
pEdit=(CEdit*)GetDlgItem(IDC_EDIT_MAXSCALE);
pEdit->EnableWindow(false);
pEdit=(CEdit*)GetDlgItem(IDC_EDIT_MINSCALE);
pEdit->EnableWindow(false);
return ;
}
else
{
pEdit=(CEdit*)GetDlgItem(IDC_EDIT_MAXSCALE);
pEdit->EnableWindow(true);
pEdit=(CEdit*)GetDlgItem(IDC_EDIT_MINSCALE);
pEdit->EnableWindow(true);
}
if(nRow == 0) //选中第一行
{
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_TOP);
if(pButton->IsWindowEnabled())
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_UP);
if(pButton->IsWindowEnabled())
pButton->EnableWindow(false);
}
else
{
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_TOP);
if(!(pButton->IsWindowEnabled()))
pButton->EnableWindow();
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_UP);
if(!(pButton->IsWindowEnabled()))
pButton->EnableWindow();
}
if(nRow == (m_lstLayers.GetItemCount() - 1))//选中最后一行
{
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_DOWN);
if(pButton->IsWindowEnabled())
pButton->EnableWindow(false);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_BOTTOM);
if(pButton->IsWindowEnabled())
pButton->EnableWindow(false);
}
else
{
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_DOWN);
if(!(pButton->IsWindowEnabled()))
pButton->EnableWindow(1);
pButton = (CButton*)GetDlgItem(IDC_BUTTON_MOVE_BOTTOM);
if(!(pButton->IsWindowEnabled()))
pButton->EnableWindow(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -