三:程序核心设计。
在界面完成之后我们的任务似乎轻了很多,的确,要关闭机器我们只需要简单的调用windows API函数 ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0)就可以了,第一个参数是一组标志位,参阅一些资料就能知道所有标志位的用途。第二个参数保留,一般为0。
我们又知道了用户设定的关机时间hour(小时)hour=SendMessage((HWND)lParam,CB_GETCURSEL,0,0); minute(分钟)minute=SendMessage((HWND)lParam,CB_GETCURSEL,0,0);,加上关机标志,用户点击了"开始"按钮后为TRUE
case IDC_BEGIN:
IsBegin=TRUE;
在任务栏图标的弹出菜单中选择了"停止"后为FALSE
case IDM_STOP:
IsBegin=FALSE;
有了所有这么多信息后, 我们就可以写出下面的代码:
if(IsBegin&&(hour==st.wHour)&&(minute==st.wMinute))//当关机标志为开并且当自动关机时间到了//的时候关机。
{
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);//调用ExitWindowsEx关闭机器。
PostQuitMessage(0);
}
return 0;
把这段代码放到WM_TIMER的消息处理中去,整个关机的过程就算设计完了,而且windows每隔1/10发一个消息,精度是很高的,一般不会出现关不了机的情况。别忘了在WM_DESTROY的处理中调用 KillTimer (hwnd,ID_TIMER)销毁计时器要不然就会一直占用内存。全部做完后觉得还是很简单的吧。
这个专题就要结束了,最后我还想说几句,其实我们学编程并不是大家想的那么困难,只要大家多coding(我喜欢这个词),多看看书(特别是大师写的书,千万别看垃圾书),多读别人的程序,多想想为什么,多和别人交流,并且把编程当作一种兴趣,我们一定可以掌握windows编程的。我写的教程自己感觉有点乱,不知道大家怎么看,但是我写的程序除了窗口函数外没有自己定义其他的函数,我想这样做的好处是,让大家可以集中精力关注程序过程,不用在函数中跳来跳去,是比较适合做示例程序的。反正不管您有什么意见欢迎和我联系:wutao8@263.net
感谢胡斌提供MFC的原代码并向所有那些无私的程序员致敬!!
(终于写完了,本来打算两个星期写完的,现在就用了三天,我想赶快写完后把功课复习一下,我还要过六级呢,但是大家别忘了我写的菜单教程,我还会一直写下去的,只要对大家有帮助我愿意付出)