📄 birthquerydlg.cpp
字号:
// BirthQueryDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MemoDBS.h"
#include "BirthQueryDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBirthQueryDlg dialog
CBirthQueryDlg::CBirthQueryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBirthQueryDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBirthQueryDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CBirthQueryDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBirthQueryDlg)
DDX_Control(pDX, IDC_LIST_BIRTHDATE, m_listBirthInfo);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBirthQueryDlg, CDialog)
//{{AFX_MSG_MAP(CBirthQueryDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CBirthQueryDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//设置列表框控件的扩展风格.
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
m_listBirthInfo.SetExtendedStyle(dwExStyle);
//初始化列表框控件
//添加姓名列
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_CENTER;
lvColumn.cx = 80;
lvColumn.iSubItem = 0;
lvColumn.pszText = "姓名";
m_listBirthInfo.InsertColumn(0, &lvColumn);
//添加出生日期列
lvColumn.cx = 100;
lvColumn.iSubItem = 1;
lvColumn.pszText = "出生日期";
m_listBirthInfo.InsertColumn(1, &lvColumn);
//添加出年龄列
lvColumn.cx = 100;
lvColumn.iSubItem = 2;
lvColumn.pszText = "年龄";
m_listBirthInfo.InsertColumn(2, &lvColumn);
//添加是否生日已过列
lvColumn.cx = 80;
lvColumn.iSubItem = 3;
lvColumn.pszText = "生日已过";
m_listBirthInfo.InsertColumn(3, &lvColumn);
//添加相差天数列
lvColumn.cx = 80;
lvColumn.iSubItem = 4;
lvColumn.pszText = "相差天数";
m_listBirthInfo.InsertColumn(4, &lvColumn);
InitData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CBirthQueryDlg::InitData()
{
if(m_pDB->IsOpen()){
TRY{
CRecordset rs(m_pDB);
//获取所有的家庭成员的信息.
CString sql = "Select * from company_member_tab ";
rs.Open(CRecordset::dynaset, sql);
CString name,date;
//获取所有的记录值.
while (!rs.IsEOF()) {
rs.GetFieldValue(1, name);
rs.GetFieldValue(3, date);
COleDateTime dt1,dt2;
date = date.Left(10);
dt1.ParseDateTime(date);
//获取当前时间.
dt2 = COleDateTime::GetCurrentTime();
//获取年龄信息.
int nOld = dt2.GetYear() - dt1.GetYear();
//修改出生日期的年数,从而获取对于当前年,时间dt1所对应的天数.
dt1.SetDateTime(dt2.GetYear(),dt1.GetMonth(),dt1.GetDay(),0,0,0);
//分别获取dt1和dt2对应的天数,两者的值就可以得出和生日相差的天数
//如果dt2比dt1大,则说明还未过生日.
int nDays1 = dt1.GetDayOfYear();
int nDays2 = dt2.GetDayOfYear();
int nDays = nDays2-nDays1;
CString strTemp = "是";
//如过dt1较大,则生日已经过了.
if(nDays1>nDays2){
nDays = nDays1-nDays2;
strTemp = "否";
}
//插入生日记录信息.
int nIndex = m_listBirthInfo.GetItemCount();
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT ;
lvItem.iItem = nIndex; //行数
lvItem.iSubItem = 0;
CString temp = name;
lvItem.pszText = (char*)(LPCTSTR)temp; //第一列
m_listBirthInfo.InsertItem(&lvItem);
m_listBirthInfo.SetItemText(nIndex,1,date.Left(10));
//插入年龄信息.
temp.Format("%d",nOld);
m_listBirthInfo.SetItemText(nIndex,2,temp);
m_listBirthInfo.SetItemText(nIndex,3,strTemp);
temp.Format("%d",nDays);
m_listBirthInfo.SetItemText(nIndex,4,temp);
rs.MoveNext();
}
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
/////////////////////////////////////////////////////////////////////////////
// CBirthQueryDlg message handlers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -