📄 housedlg.cpp
字号:
// HouseDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "House.h"
#include "HouseDlg.h"
#include ".\housedlg.h"
#include "AddAreaDlg.h"
#include "DelAreaDlg.h"
#include "EditDataDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CHouseDlg 对话框
CHouseDlg::CHouseDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHouseDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pImageList = NULL;
m_pDB = NULL;
m_pRecordSet = NULL;
}
void CHouseDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_Area);
DDX_Control(pDX, IDC_HOUSELIST, m_List);
}
BEGIN_MESSAGE_MAP(CHouseDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_BN_CLICKED(IDC_BTADD, OnBnClickedBtadd)
ON_BN_CLICKED(IDC_BTDEL, OnBnClickedBtdel)
ON_BN_CLICKED(IDC_EDITCUR, OnBnClickedEditcur)
ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
END_MESSAGE_MAP()
// CHouseDlg 消息处理程序
BOOL CHouseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将\“关于...\”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_pImageList = new CImageList();
m_pImageList->Create(IDB_BITMAP1, 16, 1, RGB(255,0,0));
m_List.SetImageList(m_pImageList, LVSIL_SMALL); /* set extended stlyes*/
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_List.InsertColumn(0,"小区名",LVCFMT_CENTER,80);
m_List.InsertColumn(1,"面积",LVCFMT_LEFT,80);
m_List.InsertColumn(2,"楼层",LVCFMT_LEFT,50);
m_List.InsertColumn(3,"价格",LVCFMT_LEFT,50);
m_List.InsertColumn(4,"数量",LVCFMT_LEFT,50);
m_List.InsertColumn(5,"开发商",LVCFMT_LEFT,70);
// 初始化数据库
try
{
m_pDB = new CDaoDatabase();
m_pDB->Open( "house.mdb" );
}
catch(CDaoException* e)
{
MessageBox( e->m_pErrorInfo->m_strDescription );
return false;
}
m_pRecordSet=new CDaoRecordset(m_pDB);
// 读入地区名,写入Combo_box控件
LoadAreaName();
LoadAllData();
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CHouseDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CHouseDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CHouseDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
// 释放所有资源
void CHouseDlg::ReleaseAll()
{
if( m_pImageList != NULL )
{
m_pImageList->DeleteImageList();
delete m_pImageList;
m_pImageList = NULL;
}
if( m_pRecordSet != NULL )
{
m_pRecordSet->Close();
delete m_pRecordSet;
m_pRecordSet = NULL;
}
if( m_pDB != NULL )
{
m_pDB->Close();
delete m_pDB;
m_pDB = NULL;
}
}
void CHouseDlg::OnBnClickedCancel()
{
ReleaseAll();
OnCancel();
}
// 读入地区名,写入Combo_box控件
void CHouseDlg::LoadAreaName()
{
while( m_Area.GetCount() > 0 )
m_Area.DeleteString(0);
CDaoTableDefInfo info;
for( int i = 0; i < m_pDB->GetTableDefCount(); i++ )
{
m_pDB->GetTableDefInfo(i,info);
if( info.m_lAttributes & dbSystemObject )
continue;
m_Area.AddString( info.m_strName );
}
if( m_Area.GetCount() > 0 )
m_Area.SetCurSel(0);
}
// 添加区域
void CHouseDlg::OnBnClickedBtadd()
{
CADDAreaDlg dlg;
dlg.SetDB( m_pDB );
dlg.DoModal();
// 重新读入区域
LoadAreaName();
}
void CHouseDlg::OnBnClickedBtdel()
{
CDelAreaDlg dlg;
dlg.SetDB( m_pDB );
dlg.DoModal();
// 重新读入区域
LoadAreaName();
}
// 读入表的所有记录
void CHouseDlg::LoadAllData( )
{
CString table;
m_Area.GetLBText( m_Area.GetCurSel(), table );
if( table == "" )
return;
if(m_pRecordSet->IsOpen())
m_pRecordSet->Close();
m_List.DeleteAllItems();
CString sql;
sql.Format("SELECT * FROM %s",table );
try
{
m_pRecordSet->Open(::dbOpenDynaset,sql );
}
catch(...)
{
MessageBox("打开表失败");
return;
}
if( m_pRecordSet != NULL )
{
for( int i = 0; i < m_pRecordSet->GetRecordCount(); i++ )
{
ReSetValue( i, m_pRecordSet );
m_pRecordSet->MoveNext();
}
}
m_pRecordSet->Close();
}
// 更新第 n 条记录的显示
void CHouseDlg::ReSetValue( int n, CDaoRecordset * pSet )
{
COleVariant value;
CString name, dev,area,floor,price,num;
try
{
pSet->GetFieldValue("NAME",value);
if( value.vt == VT_NULL )
name = "空";
else
name.Format("%s", value.bstrVal);
name.Trim();
// 面积
pSet->GetFieldValue("AREA",value);
if( value.vt == VT_NULL )
area = "0";
else
area.Format("%.2f",value.dblVal);
// 楼层
pSet->GetFieldValue("FLOOR",value);
if( value.vt == VT_NULL )
floor = "0";
else
floor.Format("%.0f",value.dblVal);
// 价格
pSet->GetFieldValue("PRICE",value);
if( value.vt == VT_NULL )
price = "0";
else
price.Format("%.2f",value.dblVal);
// 数量
pSet->GetFieldValue("NUM",value);
if( value.vt == VT_NULL )
num = "0";
else
num.Format("%.0f",value.dblVal );
// 开发商
pSet->GetFieldValue("DEVELOPER",value );
if( value.vt == VT_NULL )
dev = "";
else
dev.Format("%s",value.bstrVal);
dev.Trim();
m_List.InsertItem(n,name,0);
m_List.SetItemText(n,1,area);
m_List.SetItemText(n,2,floor);
m_List.SetItemText(n,3,price);
m_List.SetItemText(n,4,num);
m_List.SetItemText(n,5,dev);
}
catch(CDaoException* e)
{
MessageBox(e->m_pErrorInfo->m_strDescription);
}
}
void CHouseDlg::OnCbnSelchangeCombo1()
{
LoadAllData( );
}
void CHouseDlg::OnBnClickedEditcur()
{
CString table;
m_Area.GetLBText( m_Area.GetCurSel(), table );
if( table == "" )
return;
if(m_pRecordSet->IsOpen())
m_pRecordSet->Close();
CString sql;
sql.Format("SELECT * FROM %s",table );
try
{
m_pRecordSet->Open(::dbOpenDynaset,sql );
}
catch(...)
{
MessageBox("打开表失败");
return;
}
int k = GetCurSltCount();
CEditDataDlg dlg;
dlg.SetCurDate(m_pRecordSet, k);
dlg.DoModal();
m_pRecordSet->Close();
LoadAllData();
}
// 得到当前选择项
int CHouseDlg::GetCurSltCount()
{
// 是否有选中项
if(m_List.GetSelectedCount() <= 0)
return -1;
for(int i =0;i<m_List.GetItemCount();i++ )
{
if(m_List.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//选中状态。。
{
return i;
}
}
return -1; // 没有找到选中项
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -