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

📄 dataview.cpp

📁 一个通过矩阵运算得到图形连接关系的动态连接库
💻 CPP
字号:
//提供二次开发人员进行连通性分析的接口功能
//2002.10.11---------------------------Start.
#include "stdafx.h"
#include "AVInfoAPI.h"
#include "AVInfoKernel.h"
#include <afxtempl.h>


#ifdef __cplusplus
extern "C"{
#endif

/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////全局变量////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//源于连通性分析模块的全局变量
extern int **g_pMatrixNodeOrigin;	//连通性分析原始节点矩阵
extern int **g_pMatrixNodePrev;		//连通性分析结果节点矩阵(前一状态)
extern int **g_pMatrixNodeCurrent;	//连通性分析结果节点矩阵(当前状态)
//源于拓扑分析接口模块的全局变量
extern AV_NET_MODEL g_netModel;
typedef CMap<int,int,AV_COMPONENT_INFO*,AV_COMPONENT_INFO*>CMapComponentToID;
extern CMapComponentToID g_mapComponentID;
//外部函数声明
extern AV_COMPONENT_INFO* GetComponentInfoByID(AV_KEY_INFO* tagKey);
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////内部使用函数/////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//显示元件信息
AV_EXPORT USHORT AVShowComponentInfo(void* pCtrlView)
{
	CTreeCtrl* pCtrlTree = (CTreeCtrl*)pCtrlView;
	if(!pCtrlTree) return AVERR_NOT_FOUND;
	if(!pCtrlTree->GetSafeHwnd()) return AVERR_NOT_FOUND;

	pCtrlTree->ModifyStyle(NULL,TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES);
	pCtrlTree->DeleteAllItems();

	AV_COMPONENT_INFO* pComponent = NULL;
	int nID = -1;
	POSITION pos = g_mapComponentID.GetStartPosition();
	while(pos)
	{
		g_mapComponentID.GetNextAssoc(pos,nID,pComponent);
		if(!pComponent) continue;

		HTREEITEM hComponentItem,hPortItem;
		CString str(_T(""));
		str.Format(_T("元件%s:编码=%3d,状态=%d,源=%d"),pComponent->keyInfo.chKey,pComponent->keyInfo.nID,pComponent->nState,pComponent->nPower);
		hComponentItem = pCtrlTree->InsertItem(str,-1,-1,NULL);
		for(int i=0; i<pComponent->nPortSum; i++)
		{
			str.Format(_T("端子%d:节点=%d,连接元件数=%d"),i,(pComponent->pPortInfo+i)->nNode,(pComponent->pPortInfo+i)->nLinkSum);
			hPortItem = pCtrlTree->InsertItem(str,-1,-1,hComponentItem);
			for(int j=0; j<(pComponent->pPortInfo+i)->nLinkSum;j++)
			{
				str.Format(_T("%s"),((pComponent->pPortInfo+i)->pKeyInfo+j)->chKey);
				pCtrlTree->InsertItem(str,-1,-1,hPortItem);
			}
		}
	}

	return AV_NO_ERR;
}
//显示节点信息
AV_EXPORT USHORT AVShowNodeInfo(void* pCtrlView)
{
	CTreeCtrl* pCtrlTree = (CTreeCtrl*)pCtrlView;
	if(!pCtrlTree) return AVERR_NOT_FOUND;
	if(!pCtrlTree->GetSafeHwnd()) return AVERR_NOT_FOUND;

	pCtrlTree->ModifyStyle(NULL,TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES);
	pCtrlTree->DeleteAllItems();

	if(!g_netModel.pNodeInfo) return AVERR_NOT_FOUND;
	for(int i=0; i<g_netModel.nNodeSum; i++)
	{
		HTREEITEM hNodeItem;
		CString str(_T(""));
		str.Format(_T("节点%d:包含元件数目=%d,源计数=%d"),(g_netModel.pNodeInfo+i)->nID,(g_netModel.pNodeInfo+i)->nComponentSum,(g_netModel.pNodeInfo+i)->nPower);
		hNodeItem = pCtrlTree->InsertItem(str,-1,-1,NULL);
		for(int j=0; j<(g_netModel.pNodeInfo+i)->nComponentSum; j++)
		{
			AV_COMPONENT_INFO* pComponent = GetComponentInfoByID((g_netModel.pNodeInfo+i)->pKeyInfo+j);
			if(!pComponent) str.Format(_T("元件%s:状态=错误"),((g_netModel.pNodeInfo+i)->pKeyInfo+j)->chKey);
			else str.Format(_T("元件%s:状态=%d"),((g_netModel.pNodeInfo+i)->pKeyInfo+j)->chKey,pComponent->nState);
			pCtrlTree->InsertItem(str,-1,-1,hNodeItem);
		}
	}

	return AV_NO_ERR;
}
//显示拓扑子集信息(当前)
AV_EXPORT USHORT AVShowNodeMatrixCurrent(void* pCtrlView)
{
	CListCtrl* pCtrlList = (CListCtrl*)pCtrlView;
	if(!pCtrlList) return AVERR_NOT_FOUND;
	if(!pCtrlList->GetSafeHwnd()) return AVERR_NOT_FOUND;

	pCtrlList->ModifyStyle(NULL,LVS_REPORT | LVS_SINGLESEL);
	pCtrlList->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	pCtrlList->DeleteAllItems();

	int nCount = g_netModel.nNodeSum;
	if(nCount <= 0) return AVERR_NOT_FOUND;

	//添加域描述
	int* columnArray = new int[nCount+3];
	for(int i=0; i<nCount+3; i++) *(columnArray+i) = -1;
	pCtrlList->GetColumnOrderArray(columnArray,-1);
	for(i=0; i<nCount+3; i++)
	{
		if(*(columnArray+i) != -1) pCtrlList->DeleteColumn(0);
		else break;
	}
	delete columnArray;
	pCtrlList->InsertColumn(0,_T("节点"),LVCFMT_CENTER,40,-1);
	for(i=1; i<nCount+1; i++)
	{
		CString str(_T(""));
		str.Format(_T("%d"),i-1);
		pCtrlList->InsertColumn(i,str,LVCFMT_CENTER,10*(str.GetLength()+1),-1);
	}
	pCtrlList->InsertColumn(nCount+1,_T("线性相关"),LVCFMT_CENTER,60,-1);
	pCtrlList->InsertColumn(nCount+2,_T("源计数"),LVCFMT_CENTER,60,-1);

	//添加行记录
	LVITEM item;
	char A0[2];
	A0[0] = '0';
	A0[1] = '\0';
	char A1[2];
	A1[0] = '1';
	A1[1] = '\0';
	char szBuffer[32];
	for(i=0; i<nCount; i++)
	{
		item.mask = LVIF_TEXT;
		item.iItem = i;
		_itoa(i,szBuffer,10);
		item.pszText = szBuffer;
		item.stateMask = (UINT)-1;
		item.state = LVIS_ACTIVATING;
		item.iSubItem = 0;
		pCtrlList->InsertItem(&item);

		for(int j=0; j<nCount; j++)
		{
			item.mask = LVIF_TEXT;
			item.iItem = i;
			item.pszText = *(*(g_pMatrixNodeCurrent+i)+j) ? A1 : A0;
			item.stateMask = (UINT)-1;
			item.state = LVIS_ACTIVATING;
			item.iSubItem = j+1;
			pCtrlList->SetItem(&item);
		}

		item.mask = LVIF_TEXT;
		item.iItem = i;
		_itoa(*(*(g_pMatrixNodeCurrent+i)+nCount),szBuffer,10);
		item.pszText = szBuffer;
		item.stateMask = (UINT)-1;
		item.state = LVIS_ACTIVATING;
		item.iSubItem = nCount+1;
		pCtrlList->SetItem(&item);

		item.mask = LVIF_TEXT;
		item.iItem = i;
		_itoa(*(*(g_pMatrixNodeCurrent+i)+(nCount+1)),szBuffer,10);
		item.pszText = szBuffer;
		item.stateMask = (UINT)-1;
		item.state = LVIS_ACTIVATING;
		item.iSubItem = nCount+2;
		pCtrlList->SetItem(&item);
	}

	return AV_NO_ERR;
}
//显示拓扑子集信息(原始)
AV_EXPORT USHORT AVShowNodeMatrixOrigin(void* pCtrlView)
{
	CListCtrl* pCtrlList = (CListCtrl*)pCtrlView;
	if(!pCtrlList) return AVERR_NOT_FOUND;
	if(!pCtrlList->GetSafeHwnd()) return AVERR_NOT_FOUND;

	pCtrlList->ModifyStyle(NULL,LVS_REPORT | LVS_SINGLESEL);
	pCtrlList->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	pCtrlList->DeleteAllItems();

	if(g_pMatrixNodeOrigin == NULL)	return AVERR_NOT_FOUND;

	//添加域描述
	int nCount = g_netModel.nNodeSum;
	int* columnArray = new int[nCount+3];
	for(int i=0; i<nCount+3; i++) *(columnArray+i) = -1;
	pCtrlList->GetColumnOrderArray(columnArray,-1);
	for(i=0; i<nCount+3; i++)
	{
		if(*(columnArray+i) != -1) pCtrlList->DeleteColumn(0);
		else break;
	}
	delete columnArray;
	pCtrlList->InsertColumn(0,_T("节点"),LVCFMT_CENTER,40,-1);
	for(i=1; i<nCount+1; i++)
	{
		CString str(_T(""));
		str.Format(_T("%d"),i-1);
		pCtrlList->InsertColumn(i,str,LVCFMT_CENTER,10*(str.GetLength()+1),-1);
	}
	pCtrlList->InsertColumn(nCount+1,_T("线性相关"),LVCFMT_CENTER,60,-1);
	pCtrlList->InsertColumn(nCount+2,_T("源计数"),LVCFMT_CENTER,60,-1);

	//添加行记录
	LVITEM item;
	char A0[2];
	A0[0] = '0';
	A0[1] = '\0';
	char A1[2];
	A1[0] = '1';
	A1[1] = '\0';
	char szBuffer[32];
	for(i=0; i<nCount; i++)
	{
		item.mask = LVIF_TEXT;
		item.iItem = i;
		_itoa(i,szBuffer,10);
		item.pszText = szBuffer;
		item.stateMask = (UINT)-1;
		item.state = LVIS_ACTIVATING;
		item.iSubItem = 0;
		pCtrlList->InsertItem(&item);

		for(int j=0; j<nCount+1; j++)
		{
			item.mask = LVIF_TEXT;
			item.iItem = i;
			item.pszText = *(*(g_pMatrixNodeOrigin+i)+j) ? A1 : A0;
			item.stateMask = (UINT)-1;
			item.state = LVIS_ACTIVATING;
			item.iSubItem = j+1;
			pCtrlList->SetItem(&item);
		}

		item.mask = LVIF_TEXT;
		item.iItem = i;
		_itoa(*(*(g_pMatrixNodeCurrent+i)+(nCount+1)),szBuffer,10);
		item.pszText = szBuffer;
		item.stateMask = (UINT)-1;
		item.state = LVIS_ACTIVATING;
		item.iSubItem = nCount+2;
		pCtrlList->SetItem(&item);
	}

	return AV_NO_ERR;
}
#ifdef __cplusplus
}
#endif

⌨️ 快捷键说明

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