首页 > 学院 > 开发设计 > 正文

自用MFC知识点记录

2019-11-06 07:02:23
字体:
来源:转载
供稿:网友

第一次做MFC软件,用到的相关知识记录。

1.控件文本:

CString str;

GetDlgItemText(IDC_XXX,str); //获得控件文本

SetDlgItemText(IDC_XXX,str); //设置控件文本

另外还能通过设置控件变量来获得文本值:

UpdateData(TRUE) //从控件获取值

m_Edit1 = 0; //初始化m_Edit1 ,默认会调用UpdateData(FALSE),将m_Edit1 值传递给控件显示。赋值后需手动调用该函数。

另外还有其他多种方法操作文本,未使用过暂不记录。

2.Check Box

m_Check1 = GetDlgItem(IDC_CHECK_XXX)->GetCheck(); //m_Check1 为选框变量,为尝试值是否会直接变化而不需调用函数赋值。

GetDlgItem(IDC_CHECK_XXX)->SetCheck(0);

3.Edit文本框

Edit可在属性窗口设置多行,自动换行,垂直、水平滚动条。

m_Edit.LineScroll(m_Edit.GetLineCount()); //设置垂直滚动总是显示在最下一行,未尝试水平滚动条如何设置最右

4.禁用控件(显示为灰色)

GetDlgItem(IDC_XXX)->EnableWindow(FALSE); //解禁为TRUE

5.进制转换

str.Format(L"%C",buf[i]) //将十六进制转为char类型(ASCII码) 0X30 -> '0'

str.Format(L"%02x",buf[i]) //将十六进制保存为CString类型(ASCII码) 0Xaa -> 'aa'

char ch = (char)85 //十进制转字符

char ch = (char)0x55 //十六进制转字符

保存为TXT文件需写入ASCII码,如‘0’需以0x30写入才会在TXT中显示为0,否则将以ASCII码表中的0保存,显示乱码

从文本框获得文本内容再保存如TXT中长度需为2倍,估计是因为类型所占字节数不同造成,未深究。

6.文件读写

这次使用的是MFC的API函数,C和C++有其他的文件操作函数。

CFILE file.Open(path, mode);

file.Write(str, str.GetLength());

file.Close();

7.MFC的自定义消息

(1)定义消息:

#define WM_MYMESG WM_USER + n

(2)在头文件声明消息响应函数

afx_msg void OnMyMesg()

(3)添加映射 //XX默认为工程名

BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx)ON_WM_MYMESG(WM_MYMESG, &CXXDlg::OnMyMesg())END_MESSAGE_MAP()

(4)在源文件中实现响应函数

8.定时器OnTimer需添加

BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx)ON_WM_TIMER()END_MESSAGE_MAP()

否则OnTimer函数无法响应SetTimer函数

9.strlen()

strlen计算一个指针所指向的数组长度时,遇到数组元素为0返回,即认为到了尾端,不再计算后续是否还存在元素。

不知道该如何解决这一问题,目前设想是传过来的数据某一位中包含所传数据长度,可以手动读取该长度来解决。

目前想到的就这些,之后再继续补充遇到的其他问题。关于串口的简单使用之后单独再写一篇保存。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表