📄 akyarmdlg.cpp
字号:
bool CAkyarmDlg::DB_Open()
{
if(m_bDBOpen)
{
return true;
}
//1、挂载数据库卷,如果存在则打开,不存在,就新建一个
if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWAYS))
{
AfxMessageBox(_T("打开或新建数据卷失败"));
return false;
}
//2、接着打开数据库
m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,CEDB_AUTOINCREMENT,NULL);
if (m_hDB == INVALID_HANDLE_VALUE)
{
//3、 //如果数据库不存在,就新建之
if (GetLastError() == ERROR_FILE_NOT_FOUND)
{
CEDBASEINFO ceDbInfo;
ceDbInfo.dwFlags = CEDB_VALIDNAME | CEDB_VALIDTYPE | CEDB_VALIDSORTSPEC ;
wcscpy(ceDbInfo.szDbaseName , DBTABLENAME);
ceDbInfo.dwDbaseType = 0;
ceDbInfo.wNumSortOrder = 2 ; //排序字段数目
ceDbInfo.rgSortSpecs[0].propid = PID_NO;
ceDbInfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
ceDbInfo.rgSortSpecs[1].propid = PID_NAME;
ceDbInfo.rgSortSpecs[1].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
m_ceOid = CeCreateDatabaseEx(&m_ceGuid,&ceDbInfo);
if (m_ceOid == 0)
{
AfxMessageBox(_T("创建数据库失败"));
//此处得卸载数据库卷
if (!CeUnmountDBVol(&m_ceGuid))
{
AfxMessageBox(_T("卸载数据库文件卷失败"));
}
return false;
}
//4、创建数据库后,应紧接着打开数据库
m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,CEDB_AUTOINCREMENT,NULL);
if (m_hDB == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开数据库失败"));
//此处得卸载数据库卷
if (!CeUnmountDBVol(&m_ceGuid))
{
AfxMessageBox(_T("卸载数据库文件卷失败"));
}
return false;
}
}
else
{
AfxMessageBox(_T("打开数据库失败"));
//此处得卸载数据库卷
if (!CeUnmountDBVol(&m_ceGuid))
{
AfxMessageBox(_T("卸载数据库文件卷失败"));
}
return false;
}
}
ListRefresh();
m_bDBOpen=true;
return true;
}
bool CAkyarmDlg::DB_Close()
{
if(!m_bDBOpen)
{
return true;
}
SaveToFile();
//1、关闭数据库
if (!CloseHandle(m_hDB))
{
return false;
AfxMessageBox(_T("关闭数据库失败"));
return false;
}
//2、将数据库卷的数据缓冲到永久存储介质上
if (!CeFlushDBVol(&m_ceGuid))
{
return false;
AfxMessageBox(_T("缓冲介质失败"));
return false;
}
//3、卸载数据库卷
if (!CeUnmountDBVol(&m_ceGuid))
{
return false;
AfxMessageBox(_T("卸载数据库文件卷失败"));
return false;
}
m_bDBOpen=false;
return true;
}
bool CAkyarmDlg::DB_Add(CString no,double stature)
{
REC_STUDENT rec_stu;
CString name=_T("point");
//得到编号
wcscpy(rec_stu.szNo,LPCTSTR(no));
//得到姓名
wcscpy(rec_stu.szName,LPCTSTR(name));
//得到出生日期
SYSTEMTIME timeDest;
GetSystemTime(&timeDest);
::SystemTimeToFileTime(&timeDest, &(rec_stu.ftBirthday));
//得到身高值
rec_stu.iStature = stature;
AddNewStudent(rec_stu);
//添加完成之后,调用刷新按钮单击方法
ListRefresh();
return true;
}
void CAkyarmDlg::ListRefresh()
{
CEOID ceOid;
WORD wProps;
DWORD dwRecSize;
PBYTE pBuff;
PCEPROPVAL pRecord;
REC_STUDENT * pStudent;
//得到数据库记录数
int iRecordCount = GetRecordCount(&m_ceGuid,m_ceOid);
DWORD dwIndex;
//设置学生列表框标题
CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LST_STUDENT);
pListCtrl->DeleteAllItems();
for (int k=0;k<iRecordCount;k++)
{
//移动记录指针
ceOid = CeSeekDatabase(m_hDB,CEDB_SEEK_BEGINNING,k,&dwIndex);
ASSERT(ceOid !=0);
pBuff = 0;
//读取所有字段值
ceOid = CeReadRecordProps(m_hDB,CEDB_ALLOWREALLOC,&wProps,NULL,&(LPBYTE)pBuff,&dwRecSize);
ASSERT(ceOid != 0);
pRecord = (PCEPROPVAL)pBuff;
pStudent = new REC_STUDENT;
for (int i=0;i<wProps;i++)
{
switch(pRecord->propid)
{
case PID_NO:
{
wcscpy(pStudent->szNo,pRecord->val.lpwstr);
break;
}
case PID_NAME:
{
wcscpy(pStudent->szName,pRecord->val.lpwstr);
break;
}
case PID_BIRTHDAY:
{
pStudent->ftBirthday = pRecord->val.filetime;
break;
}
case PID_STATURE:
{
pStudent->iStature = pRecord->val.dblVal;
break;
}
}
pRecord++;
}
LocalFree(pBuff);
/*
//向列表框中添加学生信息
pListCtrl->InsertItem(k,_T("Test"));
//添加学生编号
pListCtrl->SetItemText(k,0,pStudent->szNo);
//添加学生姓名
pListCtrl->SetItemText(k,1,pStudent->szName);
//添加学生生日,此处需要做些转换
SYSTEMTIME systime;
FileTimeToSystemTime(&(pStudent->ftBirthday),&systime);
//TCHAR szBirthday[11];
//swprintf(szBirthday,_T("%d-%d-%d"),systime.wYear,systime.wMonth,systime.wDay);
TCHAR szBirthday[22];
swprintf(szBirthday,_T("%d-%d-%d %d:%d:%d"),systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
pListCtrl->SetItemText(k,2,szBirthday);
//添加学生身高,此处需要将数字转换成字符串
TCHAR szStature[20];
//_itow(pStudent->iStature,szStature,10);
swprintf(szStature, _T("%.2f"), pStudent->iStature );
pListCtrl->SetItemText(k,3,szStature);
*/
//向列表框中添加学生信息
pListCtrl->InsertItem(k,_T("Test"));
//添加学生编号
pListCtrl->SetItemText(k,0,pStudent->szNo);
//添加学生姓名
SYSTEMTIME systime;
FileTimeToSystemTime(&(pStudent->ftBirthday),&systime);
//TCHAR szBirthday[11];
//swprintf(szBirthday,_T("%d-%d-%d"),systime.wYear,systime.wMonth,systime.wDay);
TCHAR szBirthday[22];
swprintf(szBirthday,_T("%d-%d-%d %d:%d:%d"),systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
pListCtrl->SetItemText(k,1,szBirthday);
//添加学生身高,此处需要将数字转换成字符串
TCHAR szStature[20];
//_itow(pStudent->iStature,szStature,10);
swprintf(szStature, _T("%.2f"), pStudent->iStature );
pListCtrl->SetItemText(k,2,szStature);
delete pStudent;
}
}
void CAkyarmDlg::OnButtonRun()
{
// TODO: Add your control notification handler code here
DB_Open();
//删除数据库中所有的记录
DWORD dwIndex;
CEOID ceOid;
while(1)
{
ceOid = CeSeekDatabase(m_hDB,CEDB_SEEK_BEGINNING,0,&dwIndex);
if(ceOid==0)
{
break;
}
if (!CeDeleteRecord(m_hDB,ceOid))
{
AfxMessageBox(_T("删除失败"));
}
}
//删除导出数据文件中的所有数据
FILE *stream;
stream = _wfopen( STUDENTFILEPATH, _T("w") );
fclose( stream );
ListRefresh();
CStatic * pStaticCtrl = (CStatic *)GetDlgItem(IDC_STATIC_SS);
pStaticCtrl->SetWindowText(_T("数采运行"));
}
void CAkyarmDlg::OnButtonStop()
{
// TODO: Add your control notification handler code here
DB_Close();
CStatic * pStaticCtrl = (CStatic *)GetDlgItem(IDC_STATIC_SS);
pStaticCtrl->SetWindowText(_T("数采停止"));
}
bool CAkyarmDlg::DB_SaveOneRecord(CString strID, double dValue)
{
if(!m_bDBOpen)
{
return true;
}
ListRefresh();
//先查看该ID是否在列表中
CString strTemp=_T("");
CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LST_STUDENT);
int nCount = pListCtrl->GetItemCount();
for (int i=0;i < nCount;i++)
{
strTemp=pListCtrl->GetItemText(i,0);
if(strTemp==strID)
{
//若在列表中,更新
DB_Edit(i,strID,dValue);
return true;
}
}
//若不在列表中,添加
DB_Add(strID,dValue);
return true;
}
bool CAkyarmDlg::DB_Edit(int iItemIndex,CString no, double stature)
{
REC_STUDENT rec_stu;
CEOID ceOid;
PBYTE pBuff;
WORD wProps;
DWORD dwRecSize;
DWORD dwIndex;
ceOid = CeSeekDatabase(m_hDB,CEDB_SEEK_BEGINNING,iItemIndex,&dwIndex);
ASSERT(ceOid !=0);
pBuff = 0;
//读取所有记录值
ceOid = CeReadRecordProps(m_hDB,CEDB_ALLOWREALLOC,&wProps,NULL,&(LPBYTE)pBuff,&dwRecSize);
ASSERT(ceOid != 0);
CString name=_T("point");
//得到编号
wcscpy(rec_stu.szNo,LPCTSTR(no));
//得到姓名
wcscpy(rec_stu.szName,LPCTSTR(name));
//得到出生日期
SYSTEMTIME timeDest;
GetSystemTime(&timeDest);
::SystemTimeToFileTime(&timeDest, &(rec_stu.ftBirthday));
//得到身高值
rec_stu.iStature = stature;
EditStudent(rec_stu,ceOid);
//编辑完成之后,调用刷新按钮单击方法
ListRefresh();
return true;
}
void CAkyarmDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
ZB_Disconnect();
DB_Close();
KillTimer(1);
CDialog::OnClose();
}
void CAkyarmDlg::BufferMove(int iNumber)
{
//unsigned char g_ucRevBuffer[200];
//int g_iRevBufferPoint=0;
g_iRevBufferPoint=g_iRevBufferPoint-iNumber;
int i=0;
for(i=0;i<g_iRevBufferPoint;i++)
{
g_ucRevBuffer[i]=g_ucRevBuffer[i+iNumber];
}
}
LRESULT CAkyarmDlg::OnMessageHaveData(WPARAM wParam, LPARAM lParam)
{
HAVEDATA * pData= (HAVEDATA * )wParam;
DB_SaveOneRecord(pData->strID,pData->dValue);
delete pData;//?????????????????????
return 0;
}
void CAkyarmDlg::OnClickLstStudent(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CAkyarmDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
TCHAR szBuffer[30];
TCHAR str[30];
PSYSTEM_POWER_STATUS_EX2 pSystemPowerStatusEx2=new SYSTEM_POWER_STATUS_EX2;
DWORD dwLen=sizeof(PSYSTEM_POWER_STATUS_EX2);
GetSystemPowerStatusEx2 ( pSystemPowerStatusEx2,dwLen, false);
if(pSystemPowerStatusEx2->ACLineStatus==AC_LINE_ONLINE)
wsprintf (szBuffer, TEXT ("%s"),TEXT ("交流电源"));
else if(pSystemPowerStatusEx2->ACLineStatus==AC_LINE_UNKNOWN)
wsprintf (szBuffer, TEXT ("%s"),TEXT ("未知电源"));
else if(pSystemPowerStatusEx2->ACLineStatus==AC_LINE_BACKUP_POWER)
wsprintf (szBuffer, TEXT ("%s"),TEXT ("备用电源"));
else if(pSystemPowerStatusEx2->ACLineStatus==AC_LINE_OFFLINE)
wsprintf (szBuffer, TEXT ("%s"),TEXT ("电源"));
/**/
CProgressCtrl *pProgressCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
pProgressCtrl->SetRange(0,100);
if(pSystemPowerStatusEx2->BatteryLifePercent<=100)
{
pProgressCtrl->SetPos(pSystemPowerStatusEx2->BatteryLifePercent);
wsprintf (str, TEXT ("百分之%i"),pSystemPowerStatusEx2->BatteryLifePercent);
}
else
{
pProgressCtrl->SetPos(0);
wsprintf (str, TEXT ("%s"),TEXT("剩余电量未知"));
}
CStatic * pStaticCtrl = (CStatic *)GetDlgItem(IDC_STATIC_POWER);
pStaticCtrl->SetWindowText(szBuffer);
pStaticCtrl = (CStatic *)GetDlgItem(IDC_STATIC_PERCENT);
pStaticCtrl->SetWindowText(str);
// SetWindowText (GetDlgItem (hWnd, IDC_STATIC_POWER), szBuffer);
// SetWindowText (GetDlgItem (hWnd, IDC_STATIC_PERCENT), str);
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -