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

📄 dlgobjectproperty.cpp

📁 Embedded vc++下开发的地图查询程序
💻 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 + -