一:需求描述
最近经常在需要让计算机在特定时间关闭或者重启,所以写了这个程序。当然满足这一需求的方法很多,比如用计划任务等等,但是既然在学VC,就自己动手做一个吧。
二、解题思路
定时关机无非是设定一个关机时间,然后跟当前系统时间比较,取得这个差,然后设置一个定时器,到时间就执行相应的操作,比如shutdown、reboot、logoff等等。
三、详细过程
程序最终的画面如下:
第一步:利用Wizard生成一个对话框框架。然后按上图所示放置控件。其中“倒计时”的ID设为IDC_STATIC_NAME,“00:00:00”的ID设为IDC_STATIC_TIME(这两个在程序里要用),另外为日期、时间、ComboBox添加控件变量分别为m_Data1,m_Data2,m_ComboBox.ComboBox的样式为Drop list,即不接收输入。好了,下面就添加代码。
第二步:添加代码:
我要在按下“设定”按钮时,,把“设定”改为“重新设定”,让能设定的选项均不能再修改,除非再按一次这个按钮。所以要用一个bool型的变量记录按钮的状态,所以在对话框的头文件添加变量IsChanged,类型为bool.另外再添加3个变量m_Hour,m_Min,m_Sec,类型为int,一个long型的m_remain。好了,变量先添加这些,接下来要重载OnOK、OnCancel函数,直接用向导添加就行了;为按钮添加默认的点击处理函数;添加最小化到系统托盘的函数toTray(),消息映射 afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);以及afx_msg void OnTimer(UINT_PTR nIDEvent);记得还要在对话框cpp文件中添加相应的内容,此处不说了。在对话框cpp中添加#define WM_SHOWTASK WM_USER+1为自定义的消息。好了,现在就为函数写代码吧。
首先是在OnInitDialog()中添加
m_ComboBox.InsertString(0,_T("注销"));
m_ComboBox.InsertString(1,_T("关闭计算机"));
m_ComboBox.InsertString(2,_T("重新启动"));
m_ComboBox.SetCurSel(1);
//