394上位机VC MFC实现设备事件故障记录功能
394上位机VC MFC实现实现设备事件故障记录功能功能展示
设备每天运行都会有情况发生,如设备发生的故障,设备的保养,设备的生产记录等,都需要记录或提供事件的处理方案,我们当前例程就实现的设备事件的记录功能,效果如图。不同日期记录都会保存到不同文件,点击日历可显示不同日期事件,例程同时记录事件发生时间,事件描述,处理方法;
要点提示
例程代码是从项目工程抽取出实用的事件记录部分,每天的事件文件都会保存到根目录Events文件夹下,清空文件夹文件可调用函数ClearAllTempEventFile(CString FolderName= "Events");
事件发生时可调用对话框CTestDlg中的函数 void RecordEvent(CString event, CString method,BOOL bSaveAsFile=FALSE);进行记录。参数event为事件描述字符。参数method为事件处理字符,参数bSaveAsFile为是否保存到文件选择
实现功能
1.新建基于对话框的应用程序
2.复制例程根目录下res文件夹内全部的日历用位图到工程对应文件夹内,并依照例程的位图ID载入到工程;复制例程根目录日历类的两文件ShareCalender.hxx,ShareCalender.cxx到工程根文件并载入到工程;
3.包含日历头文件添加变量CShareCalendar m_Calendar;主对话框添加一图片控件IDC_CALENDAR,设为不可见,再添加两列表框控件IDC_TODAYEVENTLIST,IDC_LIST2,关联变量CListCtrl m_TodayList; CListCtrl m_List;
4.添加控件初始化函数 InitCalendar(); InitTodayList(); InitList(); InitLoadEvent()并在程序初始化时调用
InitCalendar(); //初始日历
InitTodayList(); //初始当日 事件列表
InitList(); //初始选中日 事件列表
InitLoadEvent(); //往两日历中 加载事件;
CSize sz;
m_Calendar.GetWindowMaxSize(sz);
MoveWindow(0,0,sz.cx*2,sz.cy*2);//设置窗口大小
CenterWindow();//窗口居中
5.添加向列表框写入数据的自定义函数,及关联日历发送的消息UM_SELCHANGE处理函数OnDateChange
void RecordEvent(CListCtrl *listctr,CString event, CString method,BOOL bClearAll=FALSE);
void RecordEvent(CListCtrl *listctr,CString sTime,CString event, CString method,BOOL bClearAll=FALSE);
void OnDateChange(LONG iYearMonth, LONG iDay);
6.添加窗口调用处理函数OnSize()及设置窗口为可调节
void CGkbc8Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
//><
CRect rc(0,0,0,0);
if(m_Calendar.m_hWnd)
{
m_Calendar.GetWindowRect(&rc);
ScreenToClient(&rc);
}
if(m_TodayList.m_hWnd)//当日事件
{
CRect rect;
rect.left =rc.right+5; //set today list window pos
rect.right =cx-5;
rect.top =rc.top;
rect.bottom =rc.bottom;
m_TodayList.MoveWindow(rect.left,rect.top,rect.Width(),rect.Height());
m_TodayList.GetWindowRect(&rect); //set last column width
ScreenToClient(&rect);
int nWidth = rect.Width()-400;
m_TodayList.SetColumnWidth(2,nWidth);
}
if(m_List.m_hWnd)
{
CRect rect;
m_List.GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rc.left;
rect.right = cx-5;
rect.top = rc.bottom+5;
rect.bottom = cy-5;
m_List.MoveWindow(rect.left,rect.top,rect.Width(),rect.Height());
m_List.GetWindowRect(&rect); //set last column width
ScreenToClient(&rect);
int nWidth = rect.Width()-400;
m_List.SetColumnWidth(2,nWidth);
}
}
我们来演示下功能实现的整个过程设备事件故障记录功能
|