扫雷游戏英雄榜的实现,分为如下几步:
(1)创建一个对话框资源,并添加相应的控件,如图15.6所示。
| (点击查看大图)图15.6 英雄榜对话框资源 | (2)配置(setup.ini)文件格式如下:
(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 }
|
GAME798就是我的家!