📄 dataview.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 + -