📄 dlgobjectproperty.cpp
字号:
// DlgObjectProperty.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "DlgObjectProperty.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgObjectProperty dialog
CDlgObjectProperty::CDlgObjectProperty(CWnd* pParent /*=NULL*/)
: CDialog(CDlgObjectProperty::IDD, pParent)
{//初始化变量
//{{AFX_DATA_INIT(CDlgObjectProperty)
m_bModify = FALSE;
m_strLayerName = _T("");
m_nID = 0;
m_strFieldName = _T("");
m_strValue = _T("");
//}}AFX_DATA_INIT
m_pRecordset = NULL;
}
void CDlgObjectProperty::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgObjectProperty)
DDX_Control(pDX, IDC_EDIT_PROPERTY, m_Edit);
DDX_Control(pDX, IDC_LIST_PROPERTY, m_lstProperty);
DDX_Check(pDX, IDC_CHECK_MODIFY, m_bModify);
DDX_Text(pDX, IDC_EDIT_LAYER, m_strLayerName);
DDX_Text(pDX, IDC_EDIT_ID, m_nID);
DDX_Text(pDX, IDC_EDIT_FIELD, m_strFieldName);
DDX_Text(pDX, IDC_EDIT_PROPERTY, m_strValue);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgObjectProperty, CDialog)
//{{AFX_MSG_MAP(CDlgObjectProperty)
ON_NOTIFY(NM_CLICK, IDC_LIST_PROPERTY, OnClickListProperty)
ON_BN_CLICKED(IDC_CHECK_MODIFY, OnCheckModify)
ON_EN_KILLFOCUS(IDC_EDIT_PROPERTY, OnKillfocusEditProperty)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgObjectProperty message handlers
BOOL CDlgObjectProperty::OnInitDialog()
{//初始化对话框
CDialog::OnInitDialog();
if ( m_pRecordset && m_pRecordset->MoveFirst() && m_pRecordset->GetCount() > 0)
{
//填入对象ID
m_nID = m_pRecordset->GetID();
//填入对象所在图层名字
CSeDatasetVector *pDv = m_pRecordset->GetDataset();
if ( pDv )
{
CSeDataSource *pDatasource = pDv->GetDataSource();
if ( pDatasource )
{//图层名是数据集名+@ +数据源名
m_strLayerName = pDv->GetName() + _T("@") + pDatasource->GetAlias();
}
}
//创建列表框的头和列
m_lstProperty.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
CString strInfo[2] = {_T(""),_T("")};
strInfo[0].LoadString( IDS_ObjectProperty_FIELD_NAME );
strInfo[1].LoadString( IDS_ObjectProperty_FIELD_VALUE );
CRect rcClient;
m_lstProperty.GetClientRect(&rcClient);
int nWidth[2] = {rcClient.Width()/2,rcClient.Width()/2};
BuildColumns(2,nWidth,strInfo);
//填入字段信息和字段值
AddObjectProperty( );
}
UpdateData( FALSE );
return TRUE;
}
void CDlgObjectProperty::BuildColumns(int nCols, int *nWidth, CString *csCol)
{//创建列表框的列
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
for(register i = 0; i < nCols; i++)
{
lvc.iSubItem = i;
lvc.pszText = (unsigned short*)(LPCTSTR)csCol[i];
lvc.cx = nWidth[i];
lvc.fmt = LVCFMT_LEFT;
m_lstProperty.InsertColumn(i,&lvc);
}
}
void CDlgObjectProperty::BuildRows(int nRows, CString *pcValue)
{//创建列表框的行
LV_ITEM lvitem;
int iItem = m_lstProperty.GetItemCount(),
iSubItem = 0,
iActualItem = 0;
for (iSubItem = 0; iSubItem < nRows; iSubItem++)
{
lvitem.mask = LVIF_TEXT | (iSubItem == 0 ? LVIF_IMAGE : 0);
lvitem.iItem = iItem;
lvitem.iSubItem = iSubItem;
lvitem.pszText = (unsigned short*)(LPCTSTR)pcValue[iSubItem];
if (iSubItem == 0)
iActualItem = m_lstProperty.InsertItem(&lvitem);
else
m_lstProperty.SetItem(&lvitem);
}
}
void CDlgObjectProperty::AddObjectProperty()
{//添加对象的属性到列表框中
CSeVariant oleValue;
CSeFieldInfo fieldInfo;
CString strFieldInfo[2] = {_T(""),_T("")};
if ( m_pRecordset && m_pRecordset->MoveFirst() )
{
long nFieldCount = m_pRecordset->GetFieldCount();//字段个数
for (register i = 0;i < nFieldCount;i++)
{
//获取字段信息
if( m_pRecordset->GetFieldInfo( i, fieldInfo ) )
{
strFieldInfo[0] = fieldInfo.m_strName; //字段名
}
//获取字段值
m_pRecordset->GetFieldValue(i,oleValue);
switch (fieldInfo.m_lFieldType)
{
case seByte:
strFieldInfo[1].Format(_T("%d"),oleValue.bVal);
break;
case seShort:
strFieldInfo[1].Format(_T("%d"),oleValue.iVal);
break;
case seLong:
strFieldInfo[1].Format(_T("%ld"),oleValue.lVal);
break;
case seFloat:
strFieldInfo[1].Format(_T("%f"),oleValue.fltVal);
break;
case seDouble:
strFieldInfo[1].Format(_T("%e"),oleValue.dblVal);
break;
case seBoolean:
strFieldInfo[1] = oleValue.boolVal ? _T("True") : _T("False");
break;
case seText:
strFieldInfo[1] = oleValue.lpszVal;
break;
default:
strFieldInfo[1] = _T("");
}
//将字段值填入列表框
BuildRows(2,strFieldInfo);
//清空
strFieldInfo[0] = _T("");
strFieldInfo[1] = _T("");
}
}
//显示一下
UpdateData(FALSE);
}
void CDlgObjectProperty::OnClickListProperty(NMHDR* pNMHDR, LRESULT* pResult)
{//响应点击列表框操作
UpdateData( TRUE );
POSITION pos = m_lstProperty.GetFirstSelectedItemPosition();
int nItem = m_lstProperty.GetNextSelectedItem( pos );
if ( nItem != -1 )
{
CSeFieldInfo fieldInfo;
//将要修改的字段名和字段值填入文本框中
if ( m_pRecordset )
{
if ( m_pRecordset->GetFieldInfo( nItem, fieldInfo ))//获取字段信息
{
m_strFieldName = m_lstProperty.GetItemText( nItem, 0 );
m_strValue = m_lstProperty.GetItemText( nItem, 1 );
}
}
}
UpdateData( FALSE );
*pResult = 0;
}
void CDlgObjectProperty::OnCheckModify()
{//当修改字段值检查框是否选中时,字段名和字段值文本框的状态
m_bModify = !m_bModify;
( (CWnd* )GetDlgItem( IDC_EDIT_FIELD ) )->EnableWindow( m_bModify );
( (CWnd* )GetDlgItem( IDC_EDIT_PROPERTY) )->EnableWindow( m_bModify );
}
void CDlgObjectProperty::OnKillfocusEditProperty()
{//当文本框编辑失去焦点时,即编辑完成时
CWaitCursor wait;
UpdateData(TRUE);
if ( m_bModify && m_pRecordset != NULL )
{
POSITION pos = m_lstProperty.GetFirstSelectedItemPosition();
int nItem = m_lstProperty.GetNextSelectedItem( pos );
if (nItem != -1)
{
CSeFieldInfo fieldInfo;
if ( m_pRecordset->GetFieldInfo( nItem, fieldInfo ))//获取字段信息
{//判断该字段是否是系统字段,字段值编辑框是否为空
if ( ! fieldInfo.IsSystemField() && !m_strValue.IsEmpty() )
{
//修改字段值,并更新记录集
if (m_pRecordset->Edit() &&
m_pRecordset->SetFieldValue(m_strFieldName,m_strValue) &&
m_pRecordset->Update())
{
//将新改的字段值添加到列表框中
m_lstProperty.SetItemText( nItem,1,m_strValue);
m_Edit.SetWindowText(_T(""));
}
}
//如果字段是系统字段,或字段值为空,则修改失败
else
{
//弹出失败消息框
AfxMessageBox( IDS_ObjectProperty_MODIFY_FAILED );
m_Edit.SetWindowText(_T(""));
}
}
}
}
UpdateData(FALSE);
}
void CDlgObjectProperty::OnDestroy()
{//关闭该对话框
CDialog::OnDestroy();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -