MFC打字训练娱乐程序(四)

来源:互联网 发布:阿里云简单应用 编辑:程序博客网 时间:2024/05/21 22:24

就要回学校了,由于时间仓促,简要介绍一下我的子窗口的程序。

这里说明,子窗口在建立时没有初始化响应函数,此时我们可以自己添加OnInitDialog,但是要在子窗口的头文件中包含该响应函数,以下是我的初始化操作

BOOL CCompile::OnInitDialog()

{

CDialog::OnInitDialog();

((CComboBox*)GetDlgItem(IDC_COMBO1))->ResetContent();//消除现有所有内容

((CComboBox*)GetDlgItem(IDC_COMBO2))->ResetContent();//消除现有所有内容

((CComboBox*)GetDlgItem(IDC_COMBO3))->ResetContent();//消除现有所有内容

((CComboBox*)GetDlgItem(IDC_COMBO4))->ResetContent();//消除现有所有内容

GetCurrentDirectory(MAX_PATHssIniPath);

lstrcat(ssIniPath, "//Option.ini");

CIniConfig m_ini(ssIniPath);

char ssOption1[3] = {0};

m_ini.GetString("section1", "key3", ssOption1);

int iOption1 = 0;

iOption1=atoi(ssOption1);

char ssOption2[3] = {0};

m_ini.GetString("section2", "key3", ssOption2);

int iOption2 = 0;

iOption2=atoi(ssOption2);

char ssOption3[3] = {0};

m_ini.GetString("section3", "key3", ssOption3);

int iOption3 = 0;

iOption3=atoi(ssOption3);

char ssOption4[3] = {0};

m_ini.GetString("section4", "key3", ssOption4);

int iOption4 = 0;

iOption4=atoi(ssOption4);

//以下添加字体格式

m_cbExamble1.AddString("Arial");

m_cbExamble1.AddString("Arial Black");

m_cbExamble1.AddString("Comic Sans MS");

m_cbExamble1.AddString("Courier New");

m_cbExamble1.AddString("Dotum");

m_cbExamble1.AddString("DotumChe");

m_cbExamble1.AddString("Euclid");

m_cbExamble1.AddString("Times New Roman");

if (ssOption1)

{

m_cbExamble1.SetCurSel(iOption1);

}

else

m_cbExamble1.SetCurSel(0);

m_cbExamble4.AddString("");

m_cbExamble4.AddString("");

m_cbExamble4.AddString("");

m_cbExamble4.AddString("");

m_cbExamble4.AddString("绿");

m_cbExamble4.AddString("");

m_cbExamble4.AddString("");

m_cbExamble4.AddString("");

if (ssOption4)

{

m_cbExamble4.SetCurSel(iOption4);

}

else

m_cbExamble4.SetCurSel(2);

char cList[5];

for (char i = 1; i < 10; i++)

{

memset(cList, 0, sizeof(cList));

sprintf(cList, "%d", i);

m_cbExamble2.AddString(cList);

}

if (ssOption2)

{

m_cbExamble2.SetCurSel(iOption2);

}

else

m_cbExamble2.SetCurSel(0);

//以下程序用来获得字典

WIN32_FIND_DATA FindData;//查找文件必须的变量

HANDLE hFile;

char szPath[MAX_PATH];

char szRoute[MAX_PATH];

int bNext;

size_t iPos;

GetCurrentDirectory(MAX_PATHszPath);//获取软件当前路径并放在szPath中,

//将程序路径放在szPath

strcat(szPath, "//Data//*");//完善字典路径

hFile = FindFirstFile(szPath, &FindData);//获得第一个文件

if(hFile == INVALID_HANDLE_VALUE)//INVALID_HANDLE_VALUE表示无效的句柄值

{

return false;

}

do

{

memset(szPath, 0, MAX_PATH);

memset(szRoute, 0, MAX_PATH);

sprintf(szPath, "%s", FindData.cFileName);

GetFlagPos(szPath, &iPos);

if (iPos)

{

memcpy(szRouteszPathiPos);

m_cbExamble3.AddString(szRoute);

}

memset(&FindData, 0, sizeof(FindData));

bNext = FindNextFile(hFile, &FindData);

}while(bNext);

if (ssOption3)

{

m_cbExamble3.SetCurSel(iOption3);

}

else

m_cbExamble3.SetCurSel(0);

FindClose(hFile);

return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE

}

保存按钮设置如下

void CCompile::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

//以下是设置字体风格

char szWordStyle[30];

char szPosition1[3] = {0};

int nIndex1m_cbExamble1.GetCurSel();//得到选择的字典在下拉单中的位置

m_cbExamble1.GetLBText(nIndex1strCBText1);//将字典放到strCBText2

csWord = strCBText1;

strcpy(szWordStylecsWord);

itoa(nIndex1,szPosition1,10);

//以下是难度选择

int nIndex2 = m_cbExamble2.GetCurSel();//得到选择的难度在下拉单中的位置

m_cbExamble2.GetLBText(nIndex2strCBText2);//将难度放到strCBText1

iComplex=atoi(strCBText2);

inComplex = iComplex * iConst;//难度选择返回的是一个整数,此时inComplex中放有整型难度值

char szPosition2[3] = {0};

itoa(nIndex2,szPosition2,10);

//以下是字典文件选择

char szFilePath[256];

char szPosition3[3] = {0};

int nIndex3 = m_cbExamble3.GetCurSel();//得到选择的字典在下拉单中的位置

m_cbExamble3.GetLBText(nIndex3strCBText3);//将字典放到strCBText3

memset(szDicPath, 0, 256);

memset(szFilePath, 0, 256);

GetCurrentDirectory(256, szFilePath);

strcat(szDicPathszFilePath);

strcat(szDicPath, "//data//");

strcat(szDicPathstrCBText3);

strcat(szDicPath, ".txt");//组织好了文件名路径,并放在szDicPath

itoa(nIndex3,szPosition3,10);

//以下是设置字体颜色

int nIndex4m_cbExamble4.GetCurSel();//得到选择的颜色在下拉单中的位置

iColour = nIndex4;

char szPosition4[3] = {0};

itoa(nIndex4,szPosition4,10);

//以下程序实现了保存设置操作

GetCurrentDirectory(MAX_PATHszIniPath);

lstrcat(szIniPath, "//Option.ini");

CIniConfig m_ini(szIniPath);

m_ini.SetString("section1", "key1", "Word");

m_ini.SetString("section1", "key2", szWordStyle);

m_ini.SetString("section1", "key3", szPosition1);

m_ini.SetString("section2", "key1", "Difficulty");

m_ini.SetNumber("section2", "key2", inComplex);

m_ini.SetString("section2", "key3", szPosition2);

m_ini.SetString("section3", "key1", "Dictionary");

m_ini.SetString("section3", "key2", szDicPath);

m_ini.SetString("section3", "key3", szPosition3);

m_ini.SetString("section4", "key1", "Colour");

m_ini.SetNumber("section4", "key2", iColour);

m_ini.SetString("section4", "key3", szPosition4);

OnOK();

}

此外说明,在使用Combo Box控件对字典进行列举时,我另外使用的函数是

#include "string.h"

//获取字符串中"."所在的位置

int GetFlagPoschar *strsize_t *Pos)

{

*Pos = 0;

size_t iStrLen = strlen(str);

if (iStrLen == 0)

return 0;

for(size_t i = 0; i <= iStrLeni++)

{

if(str[i] =='.')

{

*Pos = i;

break;

}

}

return 1;

}

最后将本人添加的变量名简要做一概括:

子窗口:字体选择m_cbExamble1,颜色设置m_cbExamble4,难度选择m_cbExamble2,字典选择m_cbExamble3

主窗口:开始m_btn1,恢复m_ddit12,暂停m_bun3,结束m_bun2,输入框m_edit2,正确m_edit01,得分m_edit02,错误m_edit03

看过使用自己定义后的控件,感觉自己定义的很没有一定的规律,有点乱,呵呵,不管怎样,自己的程序介绍完了,但是其中也反映出很多问题,做事要有一定的条理,不要什么都将就着来,有些事可以草草而过,但是有些事就是要细心才能做的好。

为自己加油!

原创粉丝点击