看了几天的MFC对话框,今天来自己试着写个关于生成随机数的对话框小程序吧,如果想自己制作一个简单的随机数程序,需要考虑哪些元素呢?
1. 首先是如何生成随机数,这里我们使用rand()函数来实现,原型很简单,int rand()会返回一个RAND_MAX即32767范围内的一个随机数;
2. 设计一个图形接口,自己决定使用一个对话框程序来写;
3. 编写事件响应过程,重点是如何进行控件与过程数据的传递,即从空间读取文本值,进行随机数计算后写回到控件;
好了,下面我们一步一步来实现这个小工具:
一、设计图形接口
VS2008下新建一个MFC项目,定制为对话框程序,删除默认的“确定“”取消”按钮,添加两个编辑框用于输入和输出,添加静态文本框用于说明,添加按钮用于执行随机数生成过程:
二、添加按钮响应过程
双击“生成随机数”按钮,进入到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: 在此添加控件通知处理程序代码
-
}
代码中需要对用户输入的最大范围进行判断,默认使用RAND_MAX作为随机数生成范围。除了这种自己去实现与控件的数据通信之外,更加简便的方法是直接为控件绑定变量,然后直接对变量进行指定类型的操作,而这需要MFC使用DoDataExchange函数来实现控件与类成员变量的数据交换,我们需要调用UpdateData函数来实现:
-默认TRUE参数,从控件获取数据,数据从控件流向类成员变量;
-指定FALSE参数,对控件进行初始化,数据从类成员变量流向控件;
-
UpdateData(); //数据流:控件-->类成员变量
-
if (m_Max == 0)
-
m_mod = RAND_MAX;
-
else
-
m_mod = m_Max;
-
m_rand = rand() % m_mod;
-
UpdateData(FALSE); //数据流:类成员变量-->控件
运行的结果都是一样的,但是后一种方法则要简单地多:
未指定随机数生成范围:
指定随机数生成范围为1000:
阅读(587) | 评论(0) | 转发(0) |