1. 首先是如何生成随机数,这里我们使用rand()函数来实现,原型很简单,int rand()会返回一个RAND_MAX即32767范围内的一个随机数;
2. 设计一个图形接口,自己决定使用一个对话框程序来写;
3. 编写事件响应过程,重点是如何进行控件与过程数据的传递,即从空间读取文本值,进行随机数计算后写回到控件;
好了,下面我们一步一步来实现这个小工具:
一、设计图形接口
VS2008下新建一个MFC项目,定制为对话框程序,删除默认的“确定“”取消”按钮,添加两个编辑框用于输入和输出,添加静态文本框用于说明,添加按钮用于执行随机数生成过程:
![C/C++拾遗(二十五):MFC-对话框练习-随机数生成工具-LMLPHP C/C++拾遗(二十五):MFC-对话框练习-随机数生成工具-LMLPHP](https://c1.lmlphp.com/user/master/2020/09/14/son_1/96879edab114f44bdc6bc67a7a28f8c7.jpg)
二、添加按钮响应过程
双击“生成随机数”按钮,进入到CrandDlg::OnBnClickedButton1()函数,使用以下函数来实现我们的功能:
-CWnd::GetWindowTextW(str):获取控件的文本值,保存在CString str中;
-CWnd::SetWindowTextW(str_last):将str_last设置为控件的文本值;
-_itow与_wtoi:实现文本值与Int值的转换;
点击(此处)折叠或打开
- void CrandDlg::OnBnClickedButton1()
- {
-
- CString str;
- if (GetDlgItem(IDC_MAX)->GetWindowTextW(str), str == L'0')
- {
- m_mod = RAND_MAX;
- }
- else
- {
- int m_mod = (GetDlgItem(IDC_MAX)->GetWindowTextW(str), _wtoi(str));
- }
- wchar_t str_last[10];
- int num = rand()%m_mod;
- _itow(num, str_last, 10);
- GetDlgItem(IDC_SHOW)->SetWindowTextW(str_last);
- // TODO: 在此添加控件通知处理程序代码
- }
-默认TRUE参数,从控件获取数据,数据从控件流向类成员变量;
-指定FALSE参数,对控件进行初始化,数据从类成员变量流向控件;
点击(此处)折叠或打开
- UpdateData(); //数据流:控件-->类成员变量
- if (m_Max == 0)
- m_mod = RAND_MAX;
- else
- m_mod = m_Max;
- m_rand = rand() % m_mod;
- UpdateData(FALSE); //数据流:类成员变量-->控件
未指定随机数生成范围:
指定随机数生成范围为1000: