15.4.3 游戏英雄榜对话框的实现
扫雷游戏英雄榜的实现,分为如下几步:
(1)创建一个对话框资源,并添加相应的控件,如图15.6所示。
|
| (点击查看大图)图15.6 英雄榜对话框资源 |
- [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 }
