一、常用工具
按键 | 静态框 | 弹出框 | 文本框 | 下拉框 | 选择框 |
Button | Static-Test | Message-Box | Edit-Contral | Combo-Box | Check-Box |
二、工具使用
1、弹出框 (MessageBox)
MessageBox(_T("Version 1.0")); //只显示内容
MessageBox(_T("Version 1.0"), _T("SerialPort"), MB_OK); //显示内容和标题
2、文本框 (Edit Contral)
(1)多行显示、回车换行、滑动条
属性 Multiline = True //多行
属性 Want Return = True //Enter键换行
属性 Vertical Scroll = True //如果需要垂直滚动条的话将
属性 Horizontal Scroll = True //需要水平滚动条的话将
(2)输入、输出
//从文本框获取输入
CString temp;
val.GetWindowText(temp);
//输出到文本框
CString temp;
temp += "abc";
val.SetWindowText(_T("abc"));
val.SetWindowText(temp);
//追加输出
val.ReplaceSel("abc");
3、下拉框 (Combo box)
(1) 下拉列表 and 默认值
// TODO: 在此添加额外的初始化代码
int BaudArr[] = { 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200 };
CString temp;
//波特率下拉列表
for (int i = 0; i < sizeof(BaudArr) / sizeof(int); i++)
{
temp.Format(_T("%d"), BaudArr[i]);
myBaud.InsertString(i, temp); //myBaud 是下拉框变量
}
//默认波特率
temp.Format(_T("%d"), 9600);
myBaud.SetCurSel(myBaud.FindString(0, temp));
(2) 默认值
myBaud.SetCurSel(i); //选择下拉列表中的第 i 个
4、选择框 (Check Box)
(1)查看是否选中
if ( BST_CHECKED == IsDlgButtonChecked( IDC_CHECK1 ) )
{
// 勾选
}
else
{
//未选中
}
(2)改变选中状态
用API函数CheckDlgButton(); 这个函数只是用来改变对话框上的控件
CheckDlgButton(IDC_CHECKBOX1,BST_CHECKED); //将checkbox设置为选中状态
CheckDlgButton(IDC_CHECKBOX1,BST_UNCHECKED); //将checkbox设置为非选中状态
用API函数SendMessage()向控件发送BM_SETCHECK 消息
SendMessage(hwnd_checkbox,BM_SETCHECK ,BST_CHECKED,0); //将checkbox设置为选中状态
SendMessage(hwnd_checkbox,BM_SETCHECK ,BST_UNCHECKED,0); //将checkbox设置为非选中状态
三、知识点
1、连接两个 CString字符串
CString s2 = s1 + _T("\r\n"); //添加回车
2、_T() : 字符串 to Unicode编码
_T("")是一个宏,定义于tchar.h文件中。作用是将字符串转换为Unicode编码。
在C语言中普通的字符串使用ANSI进行文字处理。也就是常见的双引号字符串。但是由于数据类型的局限性,ANSI的字符串不能保存全部语言。比如说中文。
例如:char *str = "ABC";
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。可以保存中文等。可以使用_T("ABC")或者L"ABC"的方式表示UNICODE编码。
_T()和L也存在区别。
L是一定使用UNICODE进行编码。
_T()会根据编译条件的设置,选择不同的编码格式。
3、初始化
(1)在初始化函数中:默认的状态控件状态、给变量初始化。如,选择框默选中、文本框默认文本。
(2)全局变量:通常放在xxxDlg.cpp函数前面定义
4、格式化输出
(1)数字 转 进制字符串
CString temp;
int a = 10;
temp.Format(_T("%d"), a); //数字 转 10进制字符串
temp.Format(_T("%x"), a); //数字 转 16进制字符串
my_textBox.SetWindowText(temp); //输出到 my_textBox 控件变量对应的文本框中
MessageBox(temp); //弹框弹出
(2)进制字符串 转 数字
如,L"61 62 63 44" --> L"abcd"
CString temp;
my_Recvtext.GetWindowText(temp); //取数字串
int n = temp.GetLength(); //长度
string s;
for(int i=0; i<n; i++)
{
s[i]=temp[i];
}
char hc;
for(int i=0; i<n; i += 3)
{
stringstream ss;
ss<<s[i]<<s[i+1];
ss>>hc; //字符流 转 数字
temp.Format(_T("%c"), hc); //16进制数字 转 字符
my_Sendtext.ReplaceSel(temp); //追加输出
}
四、参考链接
1、Microsoft 官方资料
2、https://blog.youkuaiyun.com/qq_34849157/article/details/82257920
3、https://bbs.youkuaiyun.com/topics/461774
4、https://blog.youkuaiyun.com/self_mind/article/details/50781233