第一次做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返回,即认为到了尾端,不再计算后续是否还存在元素。
不知道该如何解决这一问题,目前设想是传过来的数据某一位中包含所传数据长度,可以手动读取该长度来解决。
目前想到的就这些,之后再继续补充遇到的其他问题。关于串口的简单使用之后单独再写一篇保存。