📄 controlattdlg.cpp
字号:
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 + -