⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segmentpara.cpp

📁 这是一个分水岭程序
💻 CPP
字号:
// SegmentPara.cpp : implementation file
//

#include "stdafx.h"
#include "myimagedb.h"
#include "SegmentPara.h"
#include "newclassnamedlg.h"
#include "mainfrm.h"
#include "resource.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSegmentPara dialog


CSegmentPara::CSegmentPara(CWnd* pParent /*=NULL*/)
	: CDialog(CSegmentPara::IDD, pParent)
{
	newAddName = "";
    isSelectChange = isAddSelect = isRemoveSelect 
		= isAddNewClass = isDeleteClass = FALSE;
	//{{AFX_DATA_INIT(CSegmentPara)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CSegmentPara::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSegmentPara)
	DDX_Control(pDX, IDC_SELECTLIST, mySelectClass);
	DDX_Control(pDX, IDC_EXISTCLASS, myExistClass);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSegmentPara, CDialog)
	ON_WM_CONTEXTMENU()
	//{{AFX_MSG_MAP(CSegmentPara)
	ON_BN_CLICKED(IDC_NEW, OnNew)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	ON_LBN_SELCHANGE(IDC_EXISTCLASS, OnSelchangeExistclass)
	ON_LBN_SELCHANGE(IDC_SELECTLIST, OnSelchangeSelectlist)
	ON_WM_DESTROY()
	ON_COMMAND(ID_ADDALL, OnAddall)
	ON_COMMAND(ID_CLEARALL, OnClearall)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSegmentPara message handlers

void CSegmentPara::OnNew() 
{
	CNewClassNameDlg mynewclassnamedlg;
	mynewclassnamedlg.DoModal();
	newAddName = mynewclassnamedlg.myClassName;
	if (newAddName!="")
	{
		myExistClass.AddString(newAddName);
	}
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isAddNewClass = TRUE;
	pMainFrame->OnSegParaChanged();
}

void CSegmentPara::AddExistClass(CString className)
//在“现存类”列表中添加项;
{
	INT findpos = mySelectClass.FindString(0, className);
	if (findpos>=0)
	{
		return;
	}
	myExistClass.AddString(className);
}

void CSegmentPara::OnDelete() 
{
	INT sel = myExistClass.GetCurSel();
	if (sel<0)
	{
		return;
	}

	CString selstr = "";
	myExistClass.GetText(sel, selstr);
	myExistClass.DeleteString(sel);
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isDeleteClass = TRUE;
	pMainFrame->OnSegParaChanged();
}

void CSegmentPara::OnAdd() 
{
	INT sel = myExistClass.GetCurSel();
	INT selcount = myExistClass.GetSelCount();
	INT * selitems = new INT[selcount];
    myExistClass.GetSelItems(selcount, selitems);

	for (INT i=0; i<selcount; i++)
	{
		CString selstr = "";
		myExistClass.GetText(selitems[i], selstr);
		mySelectClass.AddString(selstr);
	}

	delete [] selitems;
	selitems = NULL;
	
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isAddSelect = TRUE;
	pMainFrame->OnSegParaChanged();
}

void CSegmentPara::OnRemove() 
{
    //这里太怪了,一定要反复删多次才能删干净!
	while (mySelectClass.GetSelCount()>0)
	{
		INT selcount = mySelectClass.GetSelCount();
		INT * selitems = new INT[selcount];
		mySelectClass.GetSelItems(selcount, selitems);
		
		for (INT i=0; i<selcount; i++)
		{
			mySelectClass.DeleteString(selitems[i]);
		}
		delete [] selitems;
		selitems = NULL;
	}	

	mySelectClass.SetCurSel(-1);
	mySelectClass.RedrawWindow();
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isRemoveSelect = TRUE;
	pMainFrame->OnSegParaChanged();
}

CString   CSegmentPara::GetClassToAddPoints()
//得到当前选择的现存点类,准备用于为该类添加训练点;
{
	INT sel = myExistClass.GetCurSel();
	if (sel<0)
	{
		return "";
	}

	CString selstr = "";
	myExistClass.GetText(sel, selstr);

	return selstr;	
}

CString*  CSegmentPara::GetSelectClass(INT& count, INT& selIndex)
//得到当前选择的类项;
{
	count = mySelectClass.GetCount();
	selIndex = mySelectClass.GetCurSel();
	if (count<=0)
	{
		return NULL;
	}

	CString* outitems = new CString[count];

	for (INT i=0; i<count; i++)
	{
		mySelectClass.GetText(i, outitems[i]);
	}

	return outitems;
}

void CSegmentPara::OnSelchangeExistclass() 
{
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isExistChange = TRUE;
	pMainFrame->OnSegParaChanged();
}

INT CSegmentPara::GetCurEvent()
//得到当前发生的事件;
{
	if (isAddNewClass)
	{
		return 0;
	}
	if (isAddSelect)
	{
		return 1;
	}
	if (isDeleteClass)
	{
		return 2;
	}
	if (isExistChange)
	{
		return 3;
	}
	if (isRemoveSelect)
	{
		return 4;
	}
	if (isSelectChange)
	{
		return 5;
	}

	return -1;//未发生任何事件;
}

void CSegmentPara::ClearEvent()
//清事件标记;
{
    isExistChange = isSelectChange = isAddSelect 
		= isRemoveSelect = isAddNewClass = isDeleteClass 
		= FALSE;
}

void CSegmentPara::OnSelchangeSelectlist() 
{
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isSelectChange = TRUE;
	pMainFrame->OnSegParaChanged();	
}

CString CSegmentPara::GetExistListSelect()
//得到现存列表中的选择项;
{
	INT sel = myExistClass.GetCurSel();
	if (sel<0)
	{
		return "";
	}

	CString selstr = "";
	myExistClass.GetText(sel, selstr);

	return selstr;
}

void CSegmentPara::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here	
}

void CSegmentPara::OnContextMenu(CWnd*, CPoint point)
{
	// CG: This block was added by the Pop-up Menu component	{		if (point.x == -1 && point.y == -1){			//keystroke invocation			CRect rect;			GetClientRect(rect);			ClientToScreen(rect);			point = rect.TopLeft();			point.Offset(5, 5);		}		CMenu menu;		VERIFY(menu.LoadMenu(CG_IDR_POPUP_SEGMENT_PARA));		CMenu* pPopup = menu.GetSubMenu(0);		ASSERT(pPopup != NULL);		CWnd* pWndPopupOwner = this;		while (pWndPopupOwner->GetStyle() & WS_CHILD)			pWndPopupOwner = pWndPopupOwner->GetParent();		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,			pWndPopupOwner);	}
}

void CSegmentPara::OnAddall() 
{
	INT sel = myExistClass.GetCurSel();
	INT allcount = myExistClass.GetCount();
	
	for (sel=0; sel<allcount; sel++)
	{
		CString selstr = "";
		myExistClass.GetText(sel, selstr);
		
		INT findpos = mySelectClass.FindString(0, selstr);
		if (findpos>=0)
		{
			return;
		}
		mySelectClass.AddString(selstr);
	}
	
	//以下通知MAINFRM该事件,
	//虽然牺牲了类的独立性,但好象没什么别的好办法;
    CMainFrame* pMainFrame = reinterpret_cast<CMainFrame*>(AfxGetMainWnd());
	isAddSelect = TRUE;
	pMainFrame->OnSegParaChanged();	
}

void CSegmentPara::OnClearall() 
{
    mySelectClass.ResetContent();	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -