Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3041161
  • 博文数量: 167
  • 博客积分: 613
  • 博客等级: 中士
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-13 21:35
个人简介

人, 既无虎狼之爪牙,亦无狮象之力量,却能擒狼缚虎,驯狮猎象,无他,唯智慧耳。

文章分类
文章存档

2015年(19)

2014年(70)

2013年(54)

2012年(14)

2011年(10)

分类: C/C++

2013-09-02 10:55:55

     看了几天的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值的转换;

点击(此处)折叠或打开

  1. void CrandDlg::OnBnClickedButton1()
  2. {
  3.    
  4.     CString str;
  5.     if (GetDlgItem(IDC_MAX)->GetWindowTextW(str), str == L'0')
  6.     {
  7.         m_mod = RAND_MAX;
  8.     }
  9.     else
  10.     {
  11.     int m_mod = (GetDlgItem(IDC_MAX)->GetWindowTextW(str), _wtoi(str));
  12.     }
  13.     wchar_t str_last[10];
  14.     int num = rand()%m_mod;
  15.     _itow(num, str_last, 10);
  16.     GetDlgItem(IDC_SHOW)->SetWindowTextW(str_last);

  17.     // TODO: 在此添加控件通知处理程序代码
  18. }
      代码中需要对用户输入的最大范围进行判断,默认使用RAND_MAX作为随机数生成范围。除了这种自己去实现与控件的数据通信之外,更加简便的方法是直接为控件绑定变量,然后直接对变量进行指定类型的操作,而这需要MFC使用DoDataExchange函数来实现控件与类成员变量的数据交换,我们需要调用UpdateData函数来实现:
-默认TRUE参数,从控件获取数据,数据从控件流向类成员变量;
-指定FALSE参数,对控件进行初始化,数据从类成员变量流向控件;

点击(此处)折叠或打开

  1. UpdateData(); //数据流:控件-->类成员变量
  2.     if (m_Max == 0)
  3.         m_mod = RAND_MAX;
  4.     else
  5.         m_mod = m_Max;
  6.     m_rand = rand() % m_mod;
  7.     UpdateData(FALSE); //数据流:类成员变量-->控件
      运行的结果都是一样的,但是后一种方法则要简单地多:
     未指定随机数生成范围:

     指定随机数生成范围为1000:




阅读(9788) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~