加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一个简单的随机抽奖程序(初级)

(2006-11-27 20:07:20)
分类: 技术文章
    下午叫燕子吃晚饭时,发现他在弄一个java做的随机抽奖小程序,觉得有点意思,于是吃完晚饭后用MFC也做了一个简单的小程序,粗略过程如下:
    主框如下图1所示:
一个简单的随机抽奖程序(初级)
1 定义成员变量与函数说明:
class CRollDlg : public CDialog
{
// Construction
public:
 CRollDlg(CWnd* pParent = NULL); // standard constructor

 static UINT ReceiveThread1(void *param);
                            //新建一线程,用于不停的产生随机数
 CWinThread *pWorkThread1;
 
 CString m_str;       //将产生的随机值以CString的形式传给edit窗口
 CString m_temp;
 int m_rolltime;      //用于判断
 
...
}
 
2 定义"开始摇奖"函数:
void CRollDlg::OnRoll()
{
 // TODO: Add your control notification handler code here
 if(m_rolltime==0)
 {
  m_rolltime=1;
  SetDlgItemText(IDC_ROLL,"停");
  pWorkThread1=AfxBeginThread     (ReceiveThread1,this,THREAD_PRIORITY_HIGHEST);
 }
 else if(m_rolltime==1)
 {
  pWorkThread1->SuspendThread();//暂停线程
  m_rolltime=2;
  SetDlgItemText(IDC_ROLL,"开始摇奖");
 }
 else if(m_rolltime==2)
 {
  pWorkThread1->ResumeThread();//继续线程
  m_rolltime=1;
  SetDlgItemText(IDC_ROLL,"停");
 }
}
 
3 由于在debug下,线程不好使用UpdateData,故此处自定义一个消息,过程如下:
 
#define  myMessage WM_USER+100  //自定义消息
 
protected:
 HICON m_hIcon;
 // Generated message map functions
 //{{AFX_MSG(CRollDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnRoll();
 afx_msg void OnMymessage(WPARAM wParam,LPARAM lParam); //消息定义
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
 
BEGIN_MESSAGE_MAP(CRollDlg, CDialog)
 //{{AFX_MSG_MAP(CRollDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_ROLL, OnRoll)
 ON_MESSAGE(myMessage,OnMymessage) //消息映射
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
4 线程函数:
 
UINT CRollDlg::ReceiveThread1(void *param) 
{
 CRollDlg *dlg=(CRollDlg *) param;
 dlg->GetParent();
 int number;
 srand (time(0));
 for(;;)           //不停的更新随机数
 {
  for(int i=1;i<=8;i++)
  {
   number = 1 + rand() % 36; 
   dlg->m_temp.Format("%02d",number);
   dlg->m_str=dlg->m_str+dlg->m_temp+"  ";
  }
//  dlg->m_swnumber=dlg->m_str;
//  dlg->m_str="";
//  dlg->UpdateData(false); //Release模式下
  AfxGetMainWnd()->SendMessage(myMessage,0,0);//debug模式下
 }
 return 0;
 
自定义消息处理函数:
 
void CRollDlg::OnMymessage(WPARAM wParam,LPARAM lParam)

 m_swnumber=m_str;
 m_str="";
 UpdateData(false);
}
 
至此就完成了简单的随机抽奖小程序
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有