📄 classifyinfodlg.cpp
字号:
// ClassifyInfoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RSIP.h"
#include "ClassifyInfoDlg.h"
#include "RSIPView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClassifyInfoDlg dialog
CClassifyInfoDlg::CClassifyInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CClassifyInfoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CClassifyInfoDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pView = (CRSIPView *)pParent;
m_aClassifyInfoArray.RemoveAll();
m_aIDList.RemoveAll();
m_nResult = -1;
m_nResultID = -1;
}
CClassifyInfoDlg::~CClassifyInfoDlg()
{
/*
CRsThematicInfo * pRSClassInfo;
for(int i=0; i<m_aClassifyInfoArray.GetSize(); i++)
{
pRSClassInfo = (CRSClassInfo *)m_aClassifyInfoArray.GetAt(i);
delete pRSClassInfo;
}
m_aClassifyInfoArray.RemoveAll();
*/
int *pInt = NULL;
for(int i=0; i<m_aIDList.GetSize(); i++)
{
pInt = (int *)m_aIDList.GetAt(i);
ASSERT(pInt != NULL);
delete pInt;
pInt = NULL;
pInt = (int *)m_aClassList.GetAt(i);
ASSERT(pInt != NULL);
delete pInt;
pInt = NULL;
}
m_aIDList.RemoveAll();
m_aClassList.RemoveAll();
}
void CClassifyInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClassifyInfoDlg)
DDX_Control(pDX, IDC_CLASSINFOLIST, m_ClassifyInfoList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClassifyInfoDlg, CDialog)
//{{AFX_MSG_MAP(CClassifyInfoDlg)
ON_BN_CLICKED(IDC_RESET, OnReset)
ON_BN_CLICKED(IDC_COMBINE, OnCombine)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClassifyInfoDlg message handlers
BOOL CClassifyInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
Refresh();
return TRUE;
}
void CClassifyInfoDlg::Refresh()
{
m_ClassifyInfoList.DeleteAllItems();
m_ClassifyInfoList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_ClassifyInfoList.InsertColumn( 1 , "类名", LVCFMT_LEFT, 140 ,0 );
m_ClassifyInfoList.InsertColumn( 2 , "ID值", LVCFMT_LEFT, 100 ,0 );
m_ClassifyInfoList.InsertColumn( 3 , "颜色", LVCFMT_LEFT, 100 ,0 );
CImageList *pimagelist;
pimagelist = new CImageList();
HICON hIcon;
pimagelist->Create(16, 16, TRUE/*bMask*/, 1, 1);
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pimagelist->Add(hIcon);
m_ClassifyInfoList.SetImageList(pimagelist,LVSIL_SMALL);
CRsThematicInfo * pRSClassInfo;
COLORREF clrColor;
for(int i=0; i<m_aClassifyInfoArray.GetSize(); i++)
{
pRSClassInfo = (CRSClassInfo *)m_aClassifyInfoArray.GetAt(i);
LV_ITEM Item;
Item.pszText = new char[64];
Item.mask = LVIF_IMAGE | LVIF_TEXT ;
Item.iItem = i;
Item.iSubItem = 0;
Item.state = 0;
Item.stateMask = 0;
Item.iImage = 0;
Item.cchTextMax = 0;
strcpy(Item.pszText , pRSClassInfo->m_szClassName);
//if(nOrder == m_RsClassInfoFile.m_nClassCount-1)
// m_ClassifyInfoList.InsertItem( &Item );
//else
m_ClassifyInfoList.InsertItem( &Item );
Item.mask = LVIF_TEXT ;
Item.iSubItem = 1;
sprintf(Item.pszText,"%2d",pRSClassInfo->m_nValue);
m_ClassifyInfoList.SetItem( &Item );
Item.iSubItem = 2;
clrColor = pRSClassInfo->m_clrColor;
sprintf(Item.pszText,"(%3d,%3d,%3d)",GetRValue(clrColor),
GetGValue(clrColor),
GetBValue(clrColor));
m_ClassifyInfoList.SetItem( &Item );
delete Item.pszText;
}
}
void CClassifyInfoDlg::OnReset()
{
CRsThematicInfo * pRSClassInfo;
POSITION nSelect = m_ClassifyInfoList.GetFirstSelectedItemPosition();
while(nSelect)
{
// 取信息
int nSelected = m_ClassifyInfoList.GetNextSelectedItem(nSelect);
pRSClassInfo = (CRSClassInfo *)m_aClassifyInfoArray.GetAt(nSelected);
ASSERT(pRSClassInfo != NULL);
// 显示信息供修改
CClassInfoResetDlg resetDlg;
resetDlg.m_szName = pRSClassInfo->m_szClassName;
resetDlg.m_nID = pRSClassInfo->m_nValue;
resetDlg.m_nRed = GetRValue(pRSClassInfo->m_clrColor);
resetDlg.m_nGreen = GetGValue(pRSClassInfo->m_clrColor);
resetDlg.m_nBlue = GetBValue(pRSClassInfo->m_clrColor);
// 内存中修改信息
if(resetDlg.DoModal() == IDOK)
{
pRSClassInfo->m_szClassName = resetDlg.m_szName;
pRSClassInfo->m_nValue = resetDlg.m_nID;
pRSClassInfo->m_clrColor = RGB(resetDlg.m_nRed,resetDlg.m_nGreen,resetDlg.m_nBlue);
}
// 显示修改结果
LV_ITEM Item;
Item.pszText = new char[64];
Item.mask = LVIF_IMAGE | LVIF_TEXT ;
Item.iItem = nSelected;
Item.iSubItem = 0;
Item.state = 0;
Item.stateMask = 0;
Item.iImage = 0;
Item.cchTextMax = 0;
strcpy(Item.pszText , pRSClassInfo->m_szClassName);
m_ClassifyInfoList.SetItem( &Item );
Item.mask = LVIF_TEXT ;
Item.iSubItem = 1;
sprintf(Item.pszText,"%2d",pRSClassInfo->m_nValue);
m_ClassifyInfoList.SetItem( &Item );
Item.iSubItem = 2;
COLORREF clrColor = pRSClassInfo->m_clrColor;
sprintf(Item.pszText,"(%3d,%3d,%3d)",GetRValue(clrColor),
GetGValue(clrColor),
GetBValue(clrColor));
m_ClassifyInfoList.SetItem( &Item );
delete Item.pszText;
}
}
void CClassifyInfoDlg::OnCombine()
{
CCombineClassDlg combineClassDlg(this);
CRsThematicInfo * pRSClassInfo;
POSITION nSelect = m_ClassifyInfoList.GetFirstSelectedItemPosition();
while(nSelect)
{
// 取信息
int nSelected = m_ClassifyInfoList.GetNextSelectedItem(nSelect);
pRSClassInfo = (CRSClassInfo *)m_aClassifyInfoArray.GetAt(nSelected);
ASSERT(pRSClassInfo != NULL);
// 给“合并类别”窗口赋初始信息;
// 同时给后面的“合并”操作准备信息;
// 内存释放在本类中进行。
int * pInt1 = (int *)new int;
*pInt1 = pRSClassInfo->m_nValue;
combineClassDlg.m_aIDs.Add(pInt1); // 不释放内存
m_aIDList.Add(pInt1);
// 给后面的“修改类别信息”操作准备信息;
// 内存释放在本类中进行。
int * pInt2 = (int *)new int;
*pInt2 = nSelected;
m_aClassList.Add(pInt2);
}
// 获取合并后的ID值和类的序号
if(combineClassDlg.DoModal() == IDOK)
{
m_nResult = combineClassDlg.m_nResult;
m_nResultID = combineClassDlg.m_nResultID;
// 从需要归并的类中剔除保留的类
int * p = (int *)m_aIDList.GetAt(m_nResult); // ID值
delete p;
m_aIDList.RemoveAt(m_nResult);
p = (int *)m_aClassList.GetAt(m_nResult); // 序号
delete p;
m_aClassList.RemoveAt(m_nResult);
// 更新专题图数据
BYTE * pData = m_pView->GetDocument()->m_pRSImage->m_pImgData;
int height = m_pView->GetDocument()->m_pRSImage->m_nImgHeight;
int width = m_pView->GetDocument()->m_pRSImage->m_nImgWidth;
BOOL flag = FALSE;
for(int i = 0; i<height; i++)
for(int j=0; j<width; j++)
{
for(int k=0; k<m_aIDList.GetSize(); k++)
{
int *pp = (int *)m_aIDList.GetAt(k);
if(pData[i*width+j] == *pp)
{
pData[i*width+j] = m_nResultID;
break;
}
}
}
// 更新类别信息(去除转变为其他类的类别信息)
for(int l=m_aClassList.GetSize()-1; l>=0; l--)
{
int * ppp = (int *)m_aClassList.GetAt(l);
pRSClassInfo = (CRSClassInfo *)m_aClassifyInfoArray.GetAt(*ppp);
ASSERT(pRSClassInfo != NULL);
delete pRSClassInfo;
m_aClassifyInfoArray.RemoveAt(*ppp);
m_pView->GetDocument()->m_pRSImage->m_aThemeInfoArray.RemoveAt(*ppp);
}
// 更新类别信息的显示
Refresh();
// 刷新专题图显示
m_pView->GetDocument()->UpdateAllViews(NULL);
}
}
/////////////////////////////////////////////////////////////////////////////
// CClassInfoDlg1 dialog
CClassInfoDlg1::CClassInfoDlg1(CWnd* pParent /*=NULL*/)
: CDialog(CClassInfoDlg1::IDD, pParent)
{
//{{AFX_DATA_INIT(CClassInfoDlg1)
m_nClassID = 0;
m_nMethod = -1;
//}}AFX_DATA_INIT
m_nPntCount = 0;
m_pPointArray = NULL;
m_nPntNumber = 0;
m_pPntArray = NULL;
m_nCurrentIndex = 0;
m_bChange = FALSE;
m_pView = (CRSIPView *)pParent;
m_pRSClassifyInfoFile = new CRSClassifyInfoFile();
Initial();
}
void CClassInfoDlg1::Initial()
{
m_pRSClassifyInfoFile->m_nImageCount = m_pView->GetDocument()->m_pRSImage->m_nLinkedImage;
m_pRSClassifyInfoFile->m_nImageHeight = m_pView->GetDocument()->m_pRSImage->m_nImgHeight;
m_pRSClassifyInfoFile->m_nImageWidth = m_pView->GetDocument()->m_pRSImage->m_nImgWidth;
CString * pszTemp;
CString * pszTmp;
for(int j=0; j<m_pRSClassifyInfoFile->m_nImageCount; j++)
{
pszTemp = (CString *)m_pView->GetDocument()->m_pRSImage->m_aLinkedImageNameArray.GetAt(j);
pszTmp = new CString();
*pszTmp = *pszTemp;
m_pRSClassifyInfoFile->m_aImageNameArray.Add(pszTmp);
}
}
CClassInfoDlg1::~CClassInfoDlg1()
{
if(m_pRSClassifyInfoFile != NULL)
{
delete m_pRSClassifyInfoFile;
m_pRSClassifyInfoFile = NULL;
}
}
void CClassInfoDlg1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClassInfoDlg1)
DDX_Control(pDX, IDC_CLASSNAMELIST, m_ClassNameList);
DDX_Text(pDX, IDC_CLASSID, m_nClassID);
DDV_MinMaxInt(pDX, m_nClassID, 0, 255);
DDX_Radio(pDX, IDC_NEWCLASS, m_nMethod);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClassInfoDlg1, CDialog)
//{{AFX_MSG_MAP(CClassInfoDlg1)
ON_BN_CLICKED(IDC_NEWCOLOR, OnNewcolor)
ON_BN_CLICKED(IDC_NEWCLASS, OnNewclass)
ON_BN_CLICKED(IDC_EXISTCLASS, OnExistclass)
ON_CBN_SELCHANGE(IDC_CLASSNAMELIST, OnSelchangeClassnamelist)
ON_WM_PAINT()
ON_EN_CHANGE(IDC_CLASSCOLORRED, OnChangeClassColor)
ON_BN_CLICKED(IDC_SAVECLASSINFO, OnSaveclassinfo)
ON_EN_CHANGE(IDC_CLASSCOLORGREEN, OnChangeClassColor)
ON_EN_CHANGE(IDC_CLASSCOLORBLUE, OnChangeClassColor)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClassInfoDlg1 message handlers
BOOL CClassInfoDlg1::OnInitDialog()
{
CDialog::OnInitDialog();
GetDlgItem(IDC_SAVECLASSINFO)->EnableWindow(FALSE);
GetDlgItem(IDC_NEWCLASS)->EnableWindow(TRUE);
GetDlgItem(IDC_EXISTCLASS)->EnableWindow(TRUE);
m_ClassNameList.ResetContent();
if(m_pRSClassifyInfoFile != NULL)
{
CRSClassInfo * pTemp=NULL;
CString pszTemp;
int num = m_pRSClassifyInfoFile->m_aClassInfoArray.GetSize();
if(num != 0)
{
for(int i=0; i<num; i++)
{
pTemp = (CRSClassInfo *)m_pRSClassifyInfoFile->m_aClassInfoArray.GetAt(i);
pszTemp = pTemp->m_szClassName;
m_ClassNameList.AddString(pszTemp);
}
m_ClassNameList.SetCurSel(m_nCurrentIndex);
pTemp = (CRSClassInfo *)m_pRSClassifyInfoFile->m_aClassInfoArray.GetAt(m_nCurrentIndex);
m_nClassID = pTemp->m_nValue;
m_clrColor = pTemp->m_clrColor;
m_bChange = TRUE;
SetDlgItemInt(IDC_CLASSID,m_nClassID);
SetDlgItemInt(IDC_CLASSCOLORRED,GetRValue(m_clrColor));
SetDlgItemInt(IDC_CLASSCOLORGREEN,GetGValue(m_clrColor));
SetDlgItemInt(IDC_CLASSCOLORBLUE,GetBValue(m_clrColor));
m_bChange = FALSE;
RECT Rect;
SetRect(&Rect,86,99,113,125);
MapDialogRect(&Rect);
InvalidateRect(&Rect);
}
}
return TRUE;
}
void CClassInfoDlg1::OnNewcolor()
{
CColorDialog ColorDlg(m_clrColor,CC_RGBINIT,this);
if(ColorDlg.DoModal() == IDOK)
{
m_clrColor = ColorDlg.GetColor();
m_bChange = TRUE;
SetDlgItemInt(IDC_CLASSCOLORRED,GetRValue(m_clrColor));
SetDlgItemInt(IDC_CLASSCOLORGREEN,GetGValue(m_clrColor));
SetDlgItemInt(IDC_CLASSCOLORBLUE,GetBValue(m_clrColor));
m_bChange = FALSE;
((CRSClassInfo *)(m_pRSClassifyInfoFile->m_aClassInfoArray.GetAt(m_nCurrentIndex)))->m_clrColor = m_clrColor;
RECT Rect;
SetRect(&Rect,86,99,113,125);
MapDialogRect(&Rect);
InvalidateRect(&Rect);
}
}
void CClassInfoDlg1::OnNewclass()
{
m_nMethod = 0;
bool Flag = FALSE;
int nClassCount;
CRSClassInfo * pTemp;
nClassCount = m_pRSClassifyInfoFile->m_aClassInfoArray.GetSize();
for(int i=0; ; i++)
{
for(int j=0; j<nClassCount; j++)
{
pTemp = (CRSClassInfo *)m_pRSClassifyInfoFile->m_aClassInfoArray.GetAt(j);
Flag = Flag || (i == pTemp->m_nValue);
}
if(Flag == TRUE)
Flag = FALSE;
else
{
SetDlgItemInt(IDC_CLASSID,i);
break;
}
}
m_ClassNameList.AddString("");
m_ClassNameList.SetCurSel(nClassCount);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -