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

📄 controlattdlg.cpp

📁 实现mapgis下各种工作区(点,线,面,网)下的 属性及其属性记录操作
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	default:
		{
			break;
		}
}
	
}

void CControlAttDlg::GetAttstr(short ai, short type)//读出属性结构
{


		if(_GetAttStru(ai,type,&stru)>0)
		{
				CString strText;
				fldcount=stru->hd.numbfield;
            m_AttStruct.DeleteAllItems();
	 	while (m_AttStruct.DeleteColumn (0)){}//清除所有列
    m_AttStruct.InsertColumn(0,_T("字段序号"),LVCFMT_LEFT,60);
    m_AttStruct.InsertColumn(1,_T("字段名"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(2,_T("字段类型"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(3,_T("编辑标志"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(4,_T("字节长度"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(5,_T("字段偏移"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(6,_T("字符长度"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(7,_T("小数位数"),LVCFMT_LEFT,60);
	m_AttStruct.InsertColumn(8,_T("打印标注"),LVCFMT_LEFT,60);
			for(int i=0;i<stru->hd.numbfield;i++) 
			{
				strText.Format(TEXT("%d"),stru->fldEntry[i].ptc_pos);//字段号
				m_AttStruct.InsertItem(i,strText);

               m_AttStruct.SetItemText(i,1,stru->fldEntry[i].fieldname);//字段名

				switch(stru->fldEntry[i].fieldtype) {//字段类型
				case STR_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("字符串"));
					break;
				case BYTE_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("字节型"));
					break;
				case SHORT_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("短整形"));
					break;
				case LONG_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("长整形"));
					break;
				case FLOAT_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("浮点型"));
					break;
				case DOUBLE_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("双精度型"));
					break;
				case DATE_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("日期型"));
					break;
				case TIME_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("时间型"));
					break;
				case BOOL_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("布尔型"));
					break;
				case TEXT_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("文本"));
					break;
				case PICTURE_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("图像"));
					break;
				case MAP_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("地图"));
					break;
				case SOUND_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("声音"));
					break;
				case VIDEO_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("动态图像"));
					break;
				case EXT_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("扩展型"));
					break;
				case BIN_DATA_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("二进制数据"));
					break;
				case TIMESTAMP_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("邮戳"));
					break;
				case NUMBERIC_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("数字型"));
					break;
				case TABLE_TYPE:
					m_AttStruct.SetItemText(i, 2, _T("表格"));
					break;
				default:
					break;
				}
				
				switch(stru->fldEntry[i].edit_enable) {//能否编辑
				case 0:
					m_AttStruct.SetItemText(i, 3, _T("不能"));
					break;
				case 1:
					m_AttStruct.SetItemText(i, 3, _T("能"));
					break;
				case 2:
					m_AttStruct.SetItemText(i, 3, _T("禁止"));
					break;
				default:
					break;
				}
				
			
				// 字段字节长度
				strText.Format(TEXT("%d"),stru->fldEntry[i].fieldlength);
				m_AttStruct.SetItemText(i, 4, strText);
				// 字段偏移
				strText.Format(TEXT("%d"),stru->fldEntry[i].fieldoffset);
				m_AttStruct.SetItemText(i, 5, strText);
				// 字段字符长度
				strText.Format(TEXT("%d"),stru->fldEntry[i].msk_leng);
				m_AttStruct.SetItemText(i, 6, strText);
				// 小数位数
				strText.Format(TEXT("%d"),stru->fldEntry[i].point_leng);
				m_AttStruct.SetItemText(i, 7, strText);
				// 打印标志
				strText.Format(TEXT("%d"),stru->fldEntry[i].pt_flg);
				m_AttStruct.SetItemText(i, 8, strText);
				
			}	
	}
}

void CControlAttDlg::OnMenuINSERT() 
{
	// 插入项
	int i=m_AttStruct.GetSelectionMark();
//	if (i==m_AttStruct.GetItemCount()-1)
//	{
//		CString temp;
//		temp.Format(TEXT("%d"),m_AttStruct.GetItemCount());
//		m_AttStruct.InsertItem(m_AttStruct.GetItemCount(),temp);
//        for (int j=1;j<9;j++)
//        {
//			m_AttStruct.SetItemText(m_AttStruct.GetItemCount(),j,"");
//        }
//		//插入一项空的属性数据
//		CFIELD_HEAD	fldEntry;
//	    lstrcpy(fldEntry.fieldname,"");
//		  _InsertStruFld(m_Ai,TBL,1,&fldEntry,i+1); 
//          _SaveAll(m_AH);
//	}else if (i<m_AttStruct.GetItemCount()-1)
//	{
		CString mylistext[9];
		bool re=true;
		//交换内容
		for(int r=1;r<=m_AttStruct.GetItemCount()-i;r++)
		{
		for(int k=1;k<9;k++)
		{
            mylistext[k-1]=m_AttStruct.GetItemText(m_AttStruct.GetItemCount()-r,k);

			if (re)
			{CString temp;
			temp.Format(TEXT("%d"),m_AttStruct.GetItemCount());
				m_AttStruct.InsertItem(m_AttStruct.GetItemCount(),temp);
				re=false;
			}
			m_AttStruct.SetItemText(m_AttStruct.GetItemCount()-r+1,k,mylistext[k-1]);
		}
		}//交换内容
		
		for (int m=1;m<fldcount;m++)//清除原来行的内容
		{
			m_AttStruct.SetItemText(i,m,"");
		}
//插入一项空的属性数据
		CFIELD_HEAD	fldEntry;
	    lstrcpy(fldEntry.fieldname,"NewEdit");
   	m_AttStruct.SetItemText(i,1,"");
	fldEntry.fieldtype=STR_TYPE;
    m_AttStruct.SetItemText(i,2,"字符串");
	//fldEntry.edit_enable=1;
//	fldEntry.fieldlength=10;
//	fldEntry.fieldoffset=10;
    fldEntry.msk_leng=15;
    fldEntry.point_leng=6;
		  _InsertStruFld(m_Ai,TYPE,1,&fldEntry,i); 
          _SaveAll(m_AH);
		  
//	}
//	int g=m_AttStruct.GetSelectionMark();
//	CString abc;
//	abc.Format(TEXT("%d"),g);
//	AfxMessageBox(abc);
}

void CControlAttDlg::init(CString filenm, short type,CString AttorAttstr)
{
    if((m_Ai = _OpenArea(m_AH,type)) <= 0)	return ;
    char fileName[MAX_PATH];
    lstrcpy(fileName,filenm);
	if(_LoadAFile(fileName,m_Ai,NULL,NULL,NULL)<=0){_CloseArea(m_Ai);return;}
	if(AttorAttstr=="ats")
		{
		 GetAttstr(m_Ai,type);//取得工作区中的属性结构
		}
		else if(AttorAttstr=="att")
		{
	      GetAtt(m_Ai,type);//取得属性记录
		}	
}

void CControlAttDlg::GetAtt(short ai, short type)//取得属性记录
{
    char strBuf[256];
	
	char *att;
	long lFld;
	float fFld;
	double dFld;
	short sFld;
	if(_GetAttStru(ai,type,&stru)>0)
		{
		m_AttStruct.DeleteAllItems();
		while (m_AttStruct.DeleteColumn (0)){}
     m_AttStruct.InsertColumn(0,"记录编号",LVCFMT_LEFT,60);
	for(int x=1;x<=stru->hd.numbfield;x++)
		{
		m_AttStruct.InsertColumn(x,stru->fldEntry[x-1].fieldname,LVCFMT_LEFT,60);
		}
	long rcdNum;
		_GetRcdNum(ai,type,&rcdNum);

		for(long i=1;i<rcdNum;i++)
		{
			if(_GetAtt(ai,type,i,&stru,&att)<=0)
				continue;
			CString szFld;
			szFld.Format("%d",i-1);
			m_AttStruct.InsertItem(i-1,szFld);

			for(int j=0;j<stru->hd.numbfield;j++)
			{
				switch(stru->fldEntry[j].fieldtype)
				{
				case STR_TYPE:
					_GetFieldOnNumb(att,stru,j,strBuf,256,NULL); 
				m_AttStruct.SetItemText(i-1,j+1,strBuf);
					break;
				case LONG_TYPE:
					lFld=_GetFldOnNumb(att,stru,j,NULL,NULL);
					szFld.Format("%d",lFld);
					m_AttStruct.SetItemText(i-1,j+1,szFld);
					break;
				case SHORT_TYPE:
					sFld=_GetFldOnNumb(att,stru,j,NULL,NULL);
					szFld.Format("%d",sFld);
					m_AttStruct.SetItemText(i-1,j+1,szFld);
					break;
				case FLOAT_TYPE:
					fFld=_GetFldOnNumb(att,stru,j,NULL,NULL);
					szFld.Format("%.2f",fFld);
					m_AttStruct.SetItemText(i-1,j+1,szFld);
					break;
				case DOUBLE_TYPE:
					dFld=_GetFldOnNumb(att,stru,j,NULL,NULL);
					szFld.Format("%.2f",dFld);
					m_AttStruct.SetItemText(i-1,j+1,szFld);
					break;
				default:
					break;
				}
			}
	
		}
	}
}

void CControlAttDlg::OnMenuDELETE() //删除属性结构
{
	int i=m_AttStruct.GetSelectionMark();
	
    	m_AttStruct.DeleteItem(i);
		_DelStruFldOnNumb(m_Ai,TYPE,i);
		_SaveAll(m_AH);
	 if(i<m_AttStruct.GetItemCount()-1)
	{
       for (int r=i;r<m_AttStruct.GetItemCount();r++)
       {
		   CString temp;
		   temp.Format(TEXT("%d"),r);
		   m_AttStruct.SetItemText(r,0,temp);
       }	   
	}
	
}


void CControlAttDlg::OnMenuQUERY() 
{
	AREA_HINST ah2;
	short ai2;
	ah2=_InitWorkArea(NULL);
	ai2=_OpenArea(ah2,TYPE);
	_AttAskToArea(m_Ai,TYPE,ah2);//进行查询,将结果放进ah2


	CATT_STRU* struc;
	char *att1;
	char strBuf[256];
	float fFld;
	double dFld;
	short sFld;
	long lFld;
	CString tempstr;
	CString tempstr2;

 if(_GetAttStru(ai2,TYPE,&struc)>0)//从ah2中取出属性结构
 {
      long rcdNum;
		_GetRcdNum(ai2,TYPE,&rcdNum);
		CString szFld;
		for(long i=1;i<=rcdNum;i++)
		{
			if(_GetAtt(ai2,TYPE,i,&struc,&att1)<=0)//从属性结构中取出记录
			{continue;}
			else
			{
				//取出ai2中的一条记录
				for (int j=0;j<struc->hd.numbfield;j++ )
				{ 
				  	switch(struc->fldEntry[j].fieldtype)
				{
				case STR_TYPE:
					_GetFieldOnNumb(att1,struc,j,strBuf,256,NULL); 
			tempstr+=strBuf;
					break;
				case LONG_TYPE:
					lFld=_GetFldOnNumb(att1,struc,j,NULL,NULL);
					szFld.Format("%d",lFld);
				tempstr+=szFld;
					break;
				case SHORT_TYPE:
					sFld=_GetFldOnNumb(att1,struc,j,NULL,NULL);
					szFld.Format("%d",sFld);
				tempstr+=szFld;
					break;
				case FLOAT_TYPE:
					fFld=_GetFldOnNumb(att1,struc,j,NULL,NULL);
					szFld.Format("%.2f",fFld);
				tempstr+=szFld;
					break;
				case DOUBLE_TYPE:
					dFld=_GetFldOnNumb(att1,struc,j,NULL,NULL);
					szFld.Format("%.2f",dFld);
				tempstr+=szFld;//ai2中的数据
					break;
				default:
					break;
				}
				  
				}//取出ai2中的一条记录完

			
				for (int l=0;l<m_AttStruct.GetItemCount();l++)//用ai2中取出的记录分别和当前列表中的每一条记录相比
				{
					for (int k=0;k<stru->hd.numbfield;k++)//取出当前列表中的一条记录
					{
						tempstr2+=m_AttStruct.GetItemText(l,k+1);
					}
				if (tempstr==tempstr2)
				{
                m_AttStruct.SetItemState(l,LVIS_SELECTED,LVIS_SELECTED);   //如果listctrl的数据==ai2中取出的数据的话,设为选中状态
				}
			      tempstr2="";
				} 
			}
			tempstr="";
		}
 }
_FreeWorkArea(ah2);		
}


void CControlAttDlg::OnMenuOpenLINats() 
{
OnMenuItemsClick(2,"ats");
TYPE=LIN;
isAttstr=true;
CString strValidChars = "0123456789.";
	m_AttStruct.SetColumnValidEditCtrlCharacters(strValidChars,6);
	m_AttStruct.SetReadOnlyColumns(0);//read only
	m_AttStruct.SetReadOnlyColumns(3);//read only
	m_AttStruct.SetReadOnlyColumns(4);//read only
	m_AttStruct.SetReadOnlyColumns(5);//read only
	m_AttStruct.SetReadOnlyColumns(8);//read only
}

void CControlAttDlg::OnMenuOpenLINatt() 
{
OnMenuItemsClick(2,"att");	
TYPE=LIN;
isAttstr=false;	
}

void CControlAttDlg::OnMenuOpenPointats() 
{
OnMenuItemsClick(1,"ats");	
TYPE=PNT;
isAttstr=true;
m_AttStruct.SetComboColumns(2,TRUE);
CString strValidChars = "0123456789.";
	m_AttStruct.SetColumnValidEditCtrlCharacters(strValidChars,6);
	m_AttStruct.SetReadOnlyColumns(0);//read only
	m_AttStruct.SetReadOnlyColumns(3);//read only
	m_AttStruct.SetReadOnlyColumns(4);//read only
	m_AttStruct.SetReadOnlyColumns(5);//read only
	m_AttStruct.SetReadOnlyColumns(8);//read only
}


void CControlAttDlg::OnMenuOpenPointatt() 
{
	OnMenuItemsClick(1,"att");
	TYPE=PNT;
	isAttstr=false;
	
}

void CControlAttDlg::OnMenuOpenREGats() 
{
OnMenuItemsClick(3,"ats");
TYPE=REG;
isAttstr=true;
m_AttStruct.SetComboColumns(2,TRUE);
CString strValidChars = "0123456789.";
	m_AttStruct.SetColumnValidEditCtrlCharacters(strValidChars,6);
	m_AttStruct.SetReadOnlyColumns(0);//read only
	m_AttStruct.SetReadOnlyColumns(3);//read only
	m_AttStruct.SetReadOnlyColumns(4);//read only
	m_AttStruct.SetReadOnlyColumns(5);//read only
	m_AttStruct.SetReadOnlyColumns(8);//read only
	
}

void CControlAttDlg::OnMenuOpenREGatt() 
{
	OnMenuItemsClick(3,"att");
	TYPE=REG;
	isAttstr=false;
}


void CControlAttDlg::OnMenuOpenTableatt() 
{
OnMenuItemsClick(4,"att");
TYPE=TBL;
	isAttstr=false;
}

void CControlAttDlg::OnMenuOpenTableats() 
{
	OnMenuItemsClick(4,"ats");
	TYPE=TBL;
	isAttstr=true;
	m_AttStruct.SetComboColumns(2,TRUE);
CString strValidChars = "0123456789.";
	m_AttStruct.SetColumnValidEditCtrlCharacters(strValidChars,6);
	m_AttStruct.SetReadOnlyColumns(0);//read only
	m_AttStruct.SetReadOnlyColumns(3);//read only
	m_AttStruct.SetReadOnlyColumns(4);//read only
	m_AttStruct.SetReadOnlyColumns(5);//read only
	m_AttStruct.SetReadOnlyColumns(8);//read only
}

⌨️ 快捷键说明

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