1.Char* 、string、CString的转换
Str = strChar;// char* 直接赋给string
Str = szLeft3;//CString 转成Str
szLeft3 == _T(str.c_str());// string 转成CString
比较string 和CString是否相等:
strTemp1.Compare(strTemp1.GetString())
2.CString 的成员函数(自己查MSDN)
CString szOne;
szOne.Replace(_T("@\\*"), _T("#\\&"));
szOne.Left(2) = _T("@T")
szOne.Find(_T("Mul12")) == -1)
strTemp.Format(__T("0x%04X : "), v3);
GetCurrentDirectory(MAX_PATH,tcPath);//得到当前的路径
3.2 MFC中输出信息的方式两种:
第一种://调试显示运行行数
char str[10] = {0};
itoa(i, str, 10);
string strlog = str;
OutputDebugString(_T(strlog.c_str()));
第二种:使用MFC界面组件
问题38.7: MFC中如何使用界面的控件;
第一步,创建项目,选择MFC application,选择Dlg base选项;
第二步,添加自己想要的类和处理
第三步,添加界面的组件;接口;
第三种:MessageBox("over !!!!");
4、常见小问题:
如何设置界面上显示中文?右键点击IDD_TEXTRESOURCE_dIALOG, 选择propert,可以设置语言(language)选中文;
5、如何使用MFC来使用Editorbox进行输入和输出字符串
点击rc界面,软后进入到界面控件视图,在“Toolbox”中找到 Editor 控件,拖拽至界面中。
一种方式:使用变量的方式:选中editor控件,右键属性“add Variable”,修改Category值为Value,修改Variable name为:strData。
这样我们就创建了在类CMFCTools1Dlg中创建了成员变量strData; 可以看到Dlg中有Cstring te_comp;
想要使用te_comp ,必须在调用函数之前使用UpdataData(TRUE),而且这里函数必须是当前类CMFCTools1Dlg 的成员函数;
关键是在要使用组件时,使用update(TRUE)从组件中获取数据;
另外一种方式,如果你设置的是control类型,获取和访问的方式为:
UpdateData(TRUE);//从Edit主件中获取数值;
CString szIn;
m_ctlStrIn.GetWindowText(szIn);
m_ctrlOutput.SetWindowText(szOut);
6、MFC 编程技巧:关于Getuffer() 和 ReleaseBuffer
LPTSTR p = bFile.GetBuffer(iBaseLen * 2 );//这里乘以二的原因是我们需要的结果为字符串显示的命令;
memset(p, 0x46, iBaseLen * 2 ); //全部赋值为FF
使用getbuffer得到的内存为临时内存,最后会被添加上不必要的个字节;xCD FD FD FD FD,如果要将它去掉就必须要释放临时内存,使用bFile.ReleaseBuffer();
7、将二进制文件一次性读取保存到内存
char strFile[100000];
CFile mfile(FILENAME, CFile::modeRead|CFile::typeBinary);
//将文件全部读取到 strFile 中;
mfile.Read(strFile, mfile.GetLength());
mfile.Close();
8、读取二进制文件的字段
CString getDword(char* strFile, int offset)
{
const char *p = strFile;
CString strRet;
p += offset;
DWORD temp = *(DWORD *)p;//ECUID:四个字节数字
strRet.Format("%08x\t",temp); //长度为8位的十六进制
return strRet;
}
//读取二进制
int getDwordSize(char* strFile, int offset)
{
const char *p = strFile;
p += offset;
DWORD temp = *(DWORD *)p;//ECUID
return temp;
}
9、如何异常处理:try catch的使用;
Try catch中如果有异常就会使用catch中的语句处理,如果没有则跳过catch;
想要try catch生效果,工程中的属性必须使用SHE Exception;
10、读取二进制文件的byte、word、Dword
string getWord()
{
WORD tmpWORD = * ( WORD* ) ( filedata + dataptr );
dataptr += 2;
char strRet[MAX_PATH] = "";
sprintf_s ( strRet, MAX_PATH, "%04X\t", tmpWORD);
return strRet;
}
DWORD ReadDWORD()
{
DWORD tmpDWORD = * ( DWORD* ) ( filedata + dataptr );
dataptr += 4;
return tmpDWORD;
}
WORD ReadWORD()
{
WORD tmpWORD = * ( WORD* ) ( filedata + dataptr );
dataptr += 2;
return tmpWORD;
}
BYTE ReadBYTE()
{
BYTE tmpBYTE = filedata[dataptr++];
return tmpBYTE;
}
string ReadString()
{
DWORD strlen = ReadDWORD();//第一个四字节表示字符串长度
char tmpname[MAX_PATH] = "";
memcpy ( tmpname, filedata + dataptr, strlen );
dataptr += strlen;
string tmpstr = tmpname;
return tmpstr;
}
string ReadBorlandStr()
{
DWORD strlen = ReadBYTE(); //第一个字节表示字符串长度
char tmpname[MAX_PATH] = "";
memcpy ( tmpname, filedata + dataptr, strlen );
dataptr += strlen;
string tmpstr = tmpname;
return tmpstr;
}
//从bin文件中取出个字节长的数据,转成十六进制的字符串;
string getWord()
{
WORD tmpWORD = * ( WORD* ) ( filedata + dataptr );
dataptr += 2;
char strRet[MAX_PATH] = "";
sprintf_s ( strRet, MAX_PATH, "%04X\t", tmpWORD);
return strRet;
}
10、小技巧,拖拽获取文件名称:
string fileName;
getline ( cin, fileName );