600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 使用MFC过程中遇到的问题以及解决方法(二)

使用MFC过程中遇到的问题以及解决方法(二)

时间:2021-10-25 15:08:42

相关推荐

使用MFC过程中遇到的问题以及解决方法(二)

昨天在同事的建议下写了自己的第一篇博客,当然现在想想自己应该感到羞愧才对,学习编程,也有半年多了,正式开始使用编程语言进行工作也有几个月了,到现在都没有养成记录自己遇到的问题和新学到的知识技能.因为自己C语言用得少,之前的工作中很多时候都会遇到相同的问题,总是一遍又一遍的去进行百度查找方法,确实不应该,有了问题并知道解决问题的办法以后应该及时进行总结,防止下一次继续被同样的问题难住.

今天写一下自己开始使用MFC以来遇到的基础问题吧,都是一些基本的语法问题.

1.在使用MFC过程中遇到的字符串问题.

在C语言的标准库中,包含的字符串类型有std::string(单字节的字符)和std::wstring(宽字节的字符),定义字符串的方法一般就是使用""来定义,而MFC使用的是CString,定义字符串使用的是_T(""),_T()是一个宏定义,这样MFC会自动根据项目的字符集编码进行对字符的字节进行识别.

string转CString

CString.format("%s",string.c_str());

char转CString

CString.format("%s",char*);

char转string

strings(char*);

string转char*

char*p=string.c_str();

CString转string

strings(CString.GetBuffer());

2.在使用MFC过程中遇到的字符串匹配问题.

%c 字符

%f 浮点数

%e 浮点数指数输出

%g 浮点数不显示无意义的零

%i %d 有符号十进制整数

%u 无符号十进制整数

%o 八进制整数

%x(%X) 十六进制整数

%p 指针

%s 字符串

%% %号

%- 左对齐

%+ 右对齐

%-md 左对齐(m为位数)

%m.ns 输出m为取字符串左起n位,右补空格

%m.nf 输出浮点数,m为宽度,n为小数点右边位数

长度 h为短整型,l为长整型

使用.Format()进行字符串匹配,例如string1.Format(_T("%s%d"),string2,number); 将string2和number的数据匹配到string1中

使用sscanf_s()会将参数str的字符串根据参数format字符串来转换并格式化数据,例如sscanf(string1,_T("%s%d"),&string2,&number);将string1中的数据匹配到string2和number中.

3.使用串口接收数据并进行数据转换的问题.

在工作过程中需要使用串口进行数据的收发,一开始接收到的数据都是乱码,在同事的帮助下进行数据的格式转换,能够完整的显示出来数据了,在这里记录一下读取数据的过程.

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[12800];

if(MSCOMM_CONTROL.get_CommEvent()==2) //事件值为2表示接收缓冲区内有字符

{

variant_inp=D_MSCOMM_PDM_CONTROL.get_Input();//读缓冲区

safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量

len=safearray_inp.GetOneDimSize();//得到有效数据长度

for(k=0;k<len;k++)

{

safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

}

std::stringstream ss;

ss.clear();

for(k=0;k<len;k++)//将数组转换为Cstring型变量

{

BYTE bt=*(char*)(rxdata+k);//字符型

ss << bt;

}

wstring TEMPSTRING = CodeConverter::AcsiiToUnicode(ss.str());//ACSII码转Unicode方法

EDIT_TEMP_TEST_VALUE += TEMPSTRING.c_str();

}

4.对MFC中Dialog数据初始化的问题.

刚开始使用MFC的时候以为只是进行控件的拖拽(使用的为VS),然后在控件属性串口进行一些相关的数据配置,需要对控件添加一下响应事件则选择相应的选项就行了.后来同事建议我对空间数据初始化放在Dialog初始化方法 OnInitDialog() 中,一开始我还不以为然,后来程序遇到了问题,该显示的数据没有显示出来,这是后才意识到将初始化数据放在OnInitDialog()方法中的好处,对自己要进行初始化的数据一眼就可以看出来,而且方便修改,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。