上篇文章已经让我们有了对于MFC最简单直观的认识,但貌似并无太大的交互性可言,而且其实也没有涉及到数据的交互,所以本文通过做一个时间可以调节的定时关机的Demo来演示。
MFC入门(一)地址:http://blog.csdn.net/zmdsjtu/article/details/52311107
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在之前完成的第一个MFC小程序的基础上来进行第二个的撰写。
打开Dialog之后,首先添加Edit Control控件用于输入数据,修改其属性里的Number为True,这样这个编辑框就只能输入整数啦~可以看到这个控件的ID为IDC_EDIT1,也就是代表了这个控件的地址,如果想访问它就必须得知道这个地址。
整体布局大概如下: //无关痛痒
下面就是对于关机Button对应的代码,双击关机Button到对应的函数位置,复制以下代码:
void CFirst_MFCDlg::OnBnClickedButton3()
{
int iResult = ::MessageBox(NULL, TEXT("确认要关机?"), TEXT("关机"), MB_OKCANCEL | MB_ICONQUESTION);
if (1 == iResult)
{
CString str;
((CEdit *)GetDlgItem(IDC_EDIT1))->GetWindowText(str);//获得
CString Shut = _T("shutdown -s -t "); //左部分红色固定的字符串
str = Shut + str;
const size_t strsize = (str.GetLength() + 1) * 2; // 宽字符的长度;
char * pstr = new char[strsize]; //分配空间;
size_t sz = 0;
wcstombs_s(&sz, pstr, strsize, str, _TRUNCATE);
int n = atoi((const char*)pstr); // 字符串已经由原来的CString 转换成了 const char*
system(pstr);
//system("shutdown -s -t 15");
}
}
这里用到一个关键的功能函数system("shutdown -s -t 15")其主要作用相当于CMD里直接输hutdown -s -t 15,也就是十五秒后关机。需要做的工作也就是把15替换成从IDC_EDIT1读取的数据即可。
关键的提取输入字符的代码:
((CEdit *)GetDlgItem(IDC_EDIT1))->GetWindowText(str);
函数表示从控件读取String,但注意的是system()里的变量类型是const char*,而这里是CString类型,故而有了中间一长段由CString转const char*的代码。
此外为了防止测试的时候手画所以在点击关机按钮时首先会有弹出窗提示是否关机,具体功能各位看管可根据自己的实际需求来进行调整。
为防止手抖特意加了取消关机的按钮,其功能函数如下:
void CFirst_MFCDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
system("shutdown -a");
}
最后实现结果如下:
最后祝大家编程愉快~