huoyu123 发表于 2011-2-22 14:38:42

游戏英雄榜对话框的实现

扫雷游戏英雄榜的实现,分为如下几步:
(1)创建一个对话框资源,并添加相应的控件,如图15.6所示。


(点击查看大图)图15.6英雄榜对话框资源
(2)配置(setup.ini)文件格式如下:

[*]name=XXX

[*]time=0

(3)添加CHeroDlg类,其中需要包含IDD_HERO_DLG对话框资源和"设置可写记录标志"接口函数声明,用于外部函数调用时,设置是否对配置文件进行写操作。类的声明如代码15.4所示。
代码15.4CHeroDlg类的声明

01#if !defined(AFX_HERODLG_H__)[*]02#define AFX_HERODLG_H__
03[*]04// HeroDlg.h 头文件
05[*]06////////////////////////////////////////////
07// CHeroDlg dialog[*]08
09class CHeroDlg : public CDialog[*]10{
11public:[*]12      void SetWriteFlg(BOOL bflg);            
//接口函数,设置可记录标志变量
13      CHeroDlg(CWnd* pParent = NULL);         //构造函数[*]14
15      enum { IDD = IDD_HERO_LIST };         //对话框资源[*]16      int   m_time;         //保存时间变量
17      CString m_name;         //保存姓名变量[*]18
19      public:[*]20      virtual int DoModal();//弹出对话框函数声明
21      protected:[*]22      virtual void DoDataExchange(CDataExchange* pDX);
23[*]24protected:
25[*]26      virtual void OnOK();    //单击"久仰"按钮响应函数声明
27[*]28      DECLARE_MESSAGE_MAP()
29private:[*]30      BOOL m_bWriteflg;       //记录标志变量
31};[*]32
[*]33#endif
(4)CHeroDlg类的实现中通过调用系统API函数,来对配置文件进行读写操作。而"设置读写标志"接口函数,是对类的一个成员变量m_bWrite进行赋值操作,达到写入或者读取的区分。其代码如代码15.5所示。
代码15.5CHeroDlg类的实现

01// HeroDlg.cpp 源文件[*]02#include "stdafx.h
      //插入头文件[*]03#include "mine.h"
04#include "HeroDlg.h[*]    //插入类声明头文件
05[*]06///////////////////////////////////////////////
07// CHeroDlg 对话框[*]08
09CHeroDlg::CHeroDlg(CWnd* pParent /*=NULL*/)//构造函数[*]10      : CDialog(CHeroDlg::IDD, pParent)
11{[*]12      m_bWriteflg = FALSE;    //初始化写标志变量为假
13}[*]14
15void CHeroDlg::DoDataExchange(CDataExchange* pDX)[*]16{
17      CDialog::DoDataExchange(pDX);         //变量与资源映射[*]18      //{{AFX_DATA_MAP(CHeroDlg)
19      DDX_Text(pDX, IDC_TIME_EDIT, m_time);[*]20      DDX_Text(pDX, IDC_NAME_EDIT, m_name);
21      //}}AFX_DATA_MAP[*]22}
23[*]24BEGIN_MESSAGE_MAP(CHeroDlg, CDialog)
25      ON_BN_CLICKED(IDOK_BTN, OnBtn)          //按钮与函数映射[*]26END_MESSAGE_MAP()
27[*]28////////////////////////////////////////////////////
29// CHeroDlg 消息句柄[*]30
31void CHeroDlg::SetWriteFlg(BOOL bflg)       //设置写入标志[*]32{
33      m_bWriteflg = bflg;[*]34}
35[*]36int CHeroDlg::DoModal()   //弹出对话框
37{[*]38      char pszTmp = {0};
39[*]40      //读取配置文件
41      GetPrivateProfileString("HERO", "name", "无名氏",[*]42          pszTmp, 127, ".\\hero.ini");      //读入姓名
43      m_name = CString(pszTmp);[*]44
45      if(!m_bWriteflg)[*]46      {
47          GetPrivateProfileString("HERO", "time", "0",[*]48pszTmp, 127, ".\\hero.ini");//读入等级
49          m_time = atoi(pszTmp);[*]50      }
51[*]52      return CDialog::DoModal();
53}[*]54
55void CHeroDlg::OnBtn()      //按钮响应[*]56{
57      UpdateData(TRUE);[*]58      if(m_bWriteflg)
59      {[*]60          CString tmp;
61          //写入姓名和时间记录[*]62          WritePrivateProfileString("HERO", "name",
m_name,       ".\\hero.ini");
63          tmp.Format("%d", m_time);[*]64          WritePrivateProfileString("HERO",
"time", tmp, ".\\hero.ini");
65      }[*]66      m_bWriteflg = FALSE;
68      CDialog::OnOK();[*]69}
70[*]71BOOL CHeroDlg::OnInitDialog() //初始化对话
72{[*]73      CDialog::OnInitDialog();
74[*]75      if(m_bWriteflg)
76      {       //当为写入时,把按钮名称改变[*]77          SetDlgItemText(IDOK_BTN, "记录");
78      }[*]79
80      return TRUE;[*]81}

游戏之家 发表于 2011-2-23 15:42:33

这个我要看看.....!
GAME798就是我的家!
页: [1]
查看完整版本: 游戏英雄榜对话框的实现