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

📄 mainfrm.cpp

📁 数据结构链表的演示程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	UINT maxlong=width;
	if(maxlong>height)
		maxlong=height;

	CBoxLeng boxleng(this,maxlong);
	if(boxleng.DoModal()!=IDOK)
		return;
	int boxnum=boxleng.m_Lengs.GetSize();
	if (boxnum<=0)
		return;

	UINT leng;

	CString AllResult="\r\n\t\t***** 景观空隙度指数 *****\r\n\r\n边长";
	CString StandResult="\r\n\t\t***** 景观标准空隙度指数 *****\r\n\r\n边长";
	for(BYTE tttt=0;tttt<typenum;tttt++)
	{
		CString name;
		name.Format("\t%s",pDoc->m_BlockTypes[tttt].Name);
		AllResult+=name;
		StandResult+=name;
	}
	AllResult+="\r\n";
	StandResult+="\r\n";
	
	double * resultarray=pDoc->CalcSpace(boxnum,boxleng.m_Lengs);

	double * stand_resultarray=(double *)malloc(sizeof(double)*boxnum*typenum);

	for(int iii=0;iii<boxnum;iii++)
	{
		for(int type=0;type<typenum;type++)
		{
			stand_resultarray[iii*typenum+type]=
				log(resultarray[iii*typenum+type])/log(pDoc->m_BaseSpace[type]);
		}
	}

	for(int i=0;i<boxnum;i++)
	{
		leng=boxleng.m_Lengs[i];

		CString tmpstr;
		tmpstr.Format("\r\n%ld",leng);
		AllResult+=tmpstr;
		StandResult+=tmpstr;

		for(BYTE tt=0;tt<typenum;tt++)
		{
			tmpstr.Format("\t%.4f",resultarray[i*typenum+tt]);
			AllResult+=tmpstr;
			tmpstr.Format("\t%.4f",stand_resultarray[i*typenum+tt]);
			StandResult+=tmpstr;
		}

	}

	AfxMessageBox("注意, 将先后显示两个结果对话框, 第一个为空隙度指数,\r\n 第二个为标准空隙度指数!",MB_OK,NULL);
	
	if(boxnum<3)
	{
		CResultDlg resultdlgall(this,AllResult);
		resultdlgall.DoModal();
		CResultDlg standresultdlg(this,StandResult);
		standresultdlg.DoModal();
		return;
	}

	long * picarray=(long *)malloc(sizeof(long)*boxnum*(typenum+1));
	ZeroMemory(picarray,sizeof(long)*boxnum*(typenum+1));

	long * standpicarray=(long *)malloc(sizeof(long)*boxnum*(typenum+1));
	ZeroMemory(standpicarray,sizeof(long)*boxnum*(typenum+1));

	UINT xzoom=400/log(leng);
	for(int bb=0;bb<boxnum;bb++)
	{
		leng=boxleng.m_Lengs[bb];
		standpicarray[bb]=picarray[bb]=xzoom*log(leng);
	}

	for(int kk=0;kk<boxnum*typenum;kk++)
	{
		picarray[boxnum+kk]=log(resultarray[kk])*10000;
		standpicarray[boxnum+kk]=stand_resultarray[kk]*10000;
	}

	CResultDlg resultdlgall(this,AllResult,FALSE,0,typenum,picarray,boxnum,TRUE,xzoom,FALSE);
	resultdlgall.DoModal();

	CResultDlg standresultdlg(this,StandResult,FALSE,0,typenum,standpicarray,boxnum,TRUE,xzoom,TRUE);
	standresultdlg.DoModal();
}

void CMainFrame::OnSample() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bCanExecute)
	{
		AfxMessageBox("该图像不能用于景观分析!",MB_OK,0);
		return;
	}

	CSampleDlg sampledlg(this,pDoc->m_nWidth,pDoc->m_nHeight);
	sampledlg.DoModal();
	if(sampledlg.m_bMouseget)
	{
		pDoc->m_bSampleMouse=TRUE;
		return;
	}

	char pzFileName[256];

	int x1=sampledlg.m_nX1;
	int x2=sampledlg.m_nX2;
	int y1=sampledlg.m_nY1;
	int y2=sampledlg.m_nY2;

	strcpy(pzFileName,pDoc->m_strPathName);
	strcat(pzFileName,"(");

	char tmpstr[10];
	itoa(x1,tmpstr,10);
	strcat(pzFileName,tmpstr);
	strcat(pzFileName,"_");
	
	itoa(y1,tmpstr,10);
	strcat(pzFileName,tmpstr);
	strcat(pzFileName,"--");

	itoa(x2,tmpstr,10);
	strcat(pzFileName,tmpstr);
	strcat(pzFileName,"_");

	itoa(y2,tmpstr,10);
	strcat(pzFileName,tmpstr);

	strcat(pzFileName,").bmp");

	if(pDoc->Write(pzFileName,x1,y1,x2,y2))
	{
		CString msg;
		msg.Format("所采样区域图像已经另存为 %s,\r\n\r\n打开该文件即可进行计算!",pzFileName);
		AfxMessageBox(msg,MB_OK,NULL);
	}
	
	else
	{
		AfxMessageBox("文件保存错误,请确认是否有足够空间!",MB_OK,NULL);
	}
}

void CMainFrame::OnShowline() 
{
	CLSDoc *pDoc=GetDocument();
	pDoc->m_bShowLine=!(pDoc->m_bShowLine);

	CMenu * Menu=GetMenu();
	Menu->CheckMenuItem(IDC_SHOWLINE,
		(pDoc->m_bShowLine)?(MF_BYCOMMAND|MF_CHECKED):(MF_BYCOMMAND|MF_UNCHECKED));

	if(pDoc->m_bShowLine)
	{
		pDoc->m_bShowBox=FALSE;
		pDoc->m_bShowPoint=FALSE;
		Menu->CheckMenuItem(IDC_SHOWBOX,MF_BYCOMMAND|MF_UNCHECKED);
		Menu->CheckMenuItem(IDM_SHOWPOINT,MF_BYCOMMAND|MF_UNCHECKED);
	}

	pDoc->UpdateAllViews(NULL,PICVIEW,NULL);
}

void CMainFrame::OnInitMenu(CMenu* pMenu)
{
	CMDIFrameWnd::OnInitMenu(pMenu);

	// CG: This block added by 'Tip of the Day' component.
	{
		// TODO: This code adds the "Tip of the Day" menu item
		// on the fly.  It may be removed after adding the menu
		// item to all applicable menu items using the resource
		// editor.

		// Add Tip of the Day menu item on the fly!
		static CMenu* pSubMenu = NULL;

		CString strHelp; strHelp.LoadString(CG_IDS_TIPOFTHEDAYHELP);
		CString strMenu;
		int nMenuCount = pMenu->GetMenuItemCount();
		BOOL bFound = FALSE;
		for (int i=0; i < nMenuCount; i++) 
		{
			pMenu->GetMenuString(i, strMenu, MF_BYPOSITION);
			if (strMenu == strHelp)
			{ 
				pSubMenu = pMenu->GetSubMenu(i);
				bFound = TRUE;
				ASSERT(pSubMenu != NULL);
			}
		}

		CString strTipMenu;
		strTipMenu.LoadString(CG_IDS_TIPOFTHEDAYMENU);
		if (!bFound)
		{
			// Help menu is not available. Please add it!
			if (pSubMenu == NULL) 
			{
				// The same pop-up menu is shared between mainfrm and frame 
				// with the doc.
				static CMenu popUpMenu;
				pSubMenu = &popUpMenu;
				pSubMenu->CreatePopupMenu();
				pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION, 
					CG_IDS_TIPOFTHEDAY, strTipMenu);
			} 
			pMenu->AppendMenu(MF_STRING|MF_BYPOSITION|MF_ENABLED|MF_POPUP, 
				(UINT)pSubMenu->m_hMenu, strHelp);
			DrawMenuBar();
		} 
		else
		{      
			// Check to see if the Tip of the Day menu has already been added.
			pSubMenu->GetMenuString(0, strMenu, MF_BYPOSITION);

			if (strMenu != strTipMenu) 
			{
				// Tip of the Day submenu has not been added to the 
				// first position, so add it.
				pSubMenu->InsertMenu(0, MF_BYPOSITION);  // Separator
				pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION, 
					CG_IDS_TIPOFTHEDAY, strTipMenu);
			}
		}
	}

}

void CMainFrame::OnSpaceAverarea() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bEverAllSpace)
	{
		if(!OnBoxdefine())
			return;
	}

	CString ResultString;
	CString tmpstring;

	ResultString="\r\nBox序号\t\t平均斑块面积\r\n";

	UINT boxnum=pDoc->m_nAllBoxNum;

	for(UINT index=0;index<boxnum;index++)
	{
		tmpstring.Format("\r\n%ld\t\t%.2f",index+1,
			pDoc->m_AllVarySpace[index].AverArea);
		ResultString+=tmpstring;
	}

	CResultDlg resultdlg(NULL,ResultString);
	resultdlg.DoModal();

	if(pDoc->m_nShow!=SHOWALLSPACE)
	{
		pDoc->m_nShow=SHOWALLSPACE;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}

BOOL CMainFrame::OnBoxdefine() 
{
	CLSDoc * pDoc=GetDocument();

	BOOL bChange=FALSE;

	BOOL bOnlyPowerChange=FALSE;

	if(!pDoc->m_bDone)
	{
		if(!OnAnalyzeName())
			return FALSE;
	}

	CSpachMethodDlg methoddlg(NULL,pDoc->m_nWidth,pDoc->m_nHeight,
		pDoc->m_nXBox,pDoc->m_nYBox,pDoc->m_nHorizDist,pDoc->m_nVertiDist,
		pDoc->m_nRanBoxNum,pDoc->m_nRanBoxWidth,pDoc->m_nRanBoxHeight,pDoc->m_dPower);

	if(methoddlg.DoModal()!=IDOK)
	{
		return FALSE;
	}

	if((methoddlg.m_bRandom!=pDoc->m_bRandom)||pDoc->m_bPointFromFile)
	{
		pDoc->m_bPointFromFile=FALSE;
		bChange=TRUE;
		pDoc->m_bRandom=methoddlg.m_bRandom;
		if(methoddlg.m_bRandom)
		{
			pDoc->m_nRanBoxNum=methoddlg.m_nRanBoxNum;
			pDoc->m_nAllBoxNum=methoddlg.m_nRanBoxNum;
			pDoc->m_nRanBoxWidth=methoddlg.m_nRanBoxWidth;
			pDoc->m_nRanBoxHeight=methoddlg.m_nRanBoxHeight;
			pDoc->m_nBoxlong=methoddlg.m_nRanBoxHeight;
		}
		else
		{
			pDoc->m_nXBox=methoddlg.m_nXNum;
			pDoc->m_nYBox=methoddlg.m_nYNum;
			pDoc->m_nAllBoxNum=methoddlg.m_nXNum*methoddlg.m_nYNum;
			pDoc->m_nHorizDist=methoddlg.m_nHoriz;
			pDoc->m_nVertiDist=methoddlg.m_nVerti;
			pDoc->m_nBoxlong=pDoc->m_nHeight/methoddlg.m_nYNum;
		}
	}

	else 
	{
		if(methoddlg.m_bRandom==TRUE)
		{
			bChange=TRUE;
			pDoc->m_nRanBoxNum=methoddlg.m_nRanBoxNum;
			pDoc->m_nAllBoxNum=methoddlg.m_nRanBoxNum;
			pDoc->m_nRanBoxWidth=methoddlg.m_nRanBoxWidth;
			pDoc->m_nRanBoxHeight=methoddlg.m_nRanBoxHeight;
			pDoc->m_nBoxlong=methoddlg.m_nRanBoxHeight;
		}

		else if((methoddlg.m_bRandom==FALSE)&&
			((methoddlg.m_nXNum!=pDoc->m_nXBox)||
			 (methoddlg.m_nYNum!=pDoc->m_nYBox)||
			 (methoddlg.m_nHoriz!=pDoc->m_nHorizDist)||
			 (methoddlg.m_nVerti!=pDoc->m_nVertiDist)) )
		{
			bChange=TRUE;
			pDoc->m_nXBox=methoddlg.m_nXNum;
			pDoc->m_nYBox=methoddlg.m_nYNum;
			pDoc->m_nAllBoxNum=methoddlg.m_nXNum*methoddlg.m_nYNum;
			pDoc->m_nHorizDist=methoddlg.m_nHoriz;
			pDoc->m_nVertiDist=methoddlg.m_nVerti;
			pDoc->m_nBoxlong=pDoc->m_nHeight/methoddlg.m_nYNum;
		}

		else
		{
			bChange=FALSE;
		}
	}
		

	if((methoddlg.m_dPower!=pDoc->m_dPower)&&(!bChange))
	{
		bOnlyPowerChange=TRUE;
		pDoc->m_dPower=methoddlg.m_dPower;
	}

	if(bChange)
	{
		if(!pDoc->m_bEverDefine)
		{
			OnCoefDefine();
		}

		pDoc->m_dPower=methoddlg.m_dPower;
		pDoc->AllVarySpace();
		pDoc->CalcAllZValue();
		pDoc->m_bEverAllSpace=TRUE;
//		pDoc->m_bEverAutoCorre=TRUE;
		pDoc->UpdateAllViews(NULL,NULL,NULL);

		return TRUE;
	}

	if(bOnlyPowerChange)
	{
		pDoc->CalcAllZValue();
//		pDoc->m_bEverAutoCorre=TRUE;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}

	return TRUE;
}

void CMainFrame::OnSpaceBlance() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bEverAllSpace)
	{
		if(!OnBoxdefine())
			return;
	}

	CString ResultString;
	CString tmpstring;

	ResultString="\r\nBox序号\t\t均匀度指数\r\n";

	UINT boxnum=pDoc->m_nAllBoxNum;

	for(UINT index=0;index<boxnum;index++)
	{
		tmpstring.Format("\r\n%ld\t\t%.2f",index+1,
			pDoc->m_AllVarySpace[index].Blance);
		ResultString+=tmpstring;
	}

	CResultDlg resultdlg(NULL,ResultString);
	resultdlg.DoModal();

	if(pDoc->m_nShow!=SHOWALLSPACE)
	{
		pDoc->m_nShow=SHOWALLSPACE;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}

void CMainFrame::OnSpaceBlocknum() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bEverAllSpace)
	{
		if(!OnBoxdefine())
			return;
	}

	CString ResultString;
	CString tmpstring;

	ResultString="\r\nBox序号\t\t斑块数量\r\n";

	UINT boxnum=pDoc->m_nAllBoxNum;

	for(UINT index=0;index<boxnum;index++)
	{
		tmpstring.Format("\r\n%ld\t\t%ld",index+1,
			(ULONG)pDoc->m_AllVarySpace[index].BlockNum);
		ResultString+=tmpstring;
	}

	CResultDlg resultdlg(NULL,ResultString);
	resultdlg.DoModal();

	if(pDoc->m_nShow!=SHOWALLSPACE)
	{
		pDoc->m_nShow=SHOWALLSPACE;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}

void CMainFrame::OnSpaceChip() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bEverAllSpace)
	{
		if(!OnBoxdefine())
			return;
	}

	CString ResultString;
	CString tmpstring;

	ResultString="\r\nBox序号\t\t碎裂化指数\r\n";

	UINT boxnum=pDoc->m_nAllBoxNum;
	for(UINT index=0;index<boxnum;index++)
	{
		tmpstring.Format("\r\n%ld\t\t%.2f",index+1,
			pDoc->m_AllVarySpace[index].Chip);
		ResultString+=tmpstring;
	}

	CResultDlg resultdlg(NULL,ResultString);
	resultdlg.DoModal();

	if(pDoc->m_nShow!=SHOWALLSPACE)
	{
		pDoc->m_nShow=SHOWALLSPACE;
		pDoc->UpdateAllViews(NULL,TXTVIEW,NULL);
	}
	SwitchToView(theApp.m_pTextTemplate,RUNTIME_CLASS(CTXTView));
}

void CMainFrame::OnSpaceCity() 
{
	CLSDoc * pDoc=GetDocument();

	if(!pDoc->m_bEverAllSpace)
	{
		if(!OnBoxdefine())
			return;
	}

	CString ResultString;
	CString tmpstring;

	ResultString="\r\nBox序号\t\t城市化指数\r\n";

	UINT boxnum=pDoc->m_nAllBoxNum;

	for(UINT index=0;index<boxnum;index++)
	{
		tmpstring.Format("\r\n%ld\t\t%.2f",index+1,
			pDoc->m_AllVarySpace[index].City);
		ResultString+=tmpstring;
	}

	CResultDlg resultdlg(NULL,ResultString);
	resultdlg.DoModal();

⌨️ 快捷键说明

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