游戏英雄榜对话框的实现 

2011-02-22 14:38 发布

2637 1 0
扫雷游戏英雄榜的实现,分为如下几步:
(1)创建一个对话框资源,并添加相应的控件,如图15.6所示。
(点击查看大图)图15.6  英雄榜对话框资源
(2)配置(setup.ini)文件格式如下:

    [HERO]  
  • name=XXX
  • time=0

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

    01  #if !defined(AFX_HERODLG_H__)  
  • 02  #define AFX_HERODLG_H__  
    03  
  • 04  // HeroDlg.h 头文件  
    05  
  • 06  ////////////////////////////////////////////  
    07  // CHeroDlg dialog  
  • 08  
    09  class CHeroDlg : public CDialog  
  • 10  {  
    11  public:  
  • 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  
  • 24  protected:  
    25  
  • 26      virtual void OnOK();    //单击"久仰"按钮响应函数声明  
    27  
  • 28      DECLARE_MESSAGE_MAP()  
    29  private:  
  • 30      BOOL m_bWriteflg;       //记录标志变量  
    31  };  
  • 32  
  • 33  #endif
(4)CHeroDlg类的实现中通过调用系统API函数,来对配置文件进行读写操作。而"设置读写标志"接口函数,是对类的一个成员变量m_bWrite进行赋值操作,达到写入或者读取的区分。其代码如代码15.5所示。
代码15.5  CHeroDlg类的实现

    01  // HeroDlg.cpp 源文件  
  • 02  #include "stdafx.h  
            //插入头文件  
  • 03  #include "mine.h"  
    04  #include "HeroDlg.h  
  •     //插入类声明头文件  
    05  
  • 06  ///////////////////////////////////////////////  
    07  // CHeroDlg 对话框  
  • 08  
    09  CHeroDlg::CHeroDlg(CWnd* pParent /*=NULL*/)//构造函数  
  • 10      : CDialog(CHeroDlg::IDD, pParent)  
    11  {  
  • 12      m_bWriteflg = FALSE;    //初始化写标志变量为假  
    13  }  
  • 14  
    15  void 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  
  • 24  BEGIN_MESSAGE_MAP(CHeroDlg, CDialog)  
    25      ON_BN_CLICKED(IDOK_BTN, OnBtn)          //按钮与函数映射  
  • 26  END_MESSAGE_MAP()  
    27  
  • 28  ////////////////////////////////////////////////////  
    29  // CHeroDlg 消息句柄  
  • 30  
    31  void CHeroDlg::SetWriteFlg(BOOL bflg)       //设置写入标志  
  • 32  {  
    33      m_bWriteflg = bflg;  
  • 34  }  
    35  
  • 36  int CHeroDlg::DoModal()     //弹出对话框  
    37  {  
  • 38      char pszTmp[128] = {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  
    55  void 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  
  • 71  BOOL CHeroDlg::OnInitDialog() //初始化对话  
    72  {  
  • 73      CDialog::OnInitDialog();  
    74  
  • 75      if(m_bWriteflg)  
    76      {       //当为写入时,把按钮名称改变  
  • 77          SetDlgItemText(IDOK_BTN, "记录");  
    78      }  
  • 79  
    80      return TRUE;  
  • 81  }

楼主新帖

B Color Smilies

全部评论1

你可能喜欢

游戏英雄榜对话框的实现 
联系
我们
快速回复 返回顶部 返回列表