MFC 常用函数汇总

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 );

你可能感兴趣的:(----MFC)