【52】MFC入门到精通——(CComboBox)下拉框选项顺序与初始化不一致,默认显示项也不一致

发布于:2025-07-21 ⋅ 阅读:(12) ⋅ 点赞:(0)


上一讲,我们实现了MFC串口助手初级版。 MFC入门到精通——MFC串口助手(一)—初级版(串口设置、初始化、打开/关闭、状态显示),附源码

1 问题描述

程序运行后串口默认参数,与我们预期不完全一致;
我们预期是:串口号COM1,波特率38400,校验None,数据8,停止位1;
但实际效果:波特率19200、校验Even、数据6显示的不对。
在这里插入图片描述
我们再次检查串口参数初始化代码,完全没问题;

//========================================== = 初始化对话框========================================== =

//设串口组合列表框
TCHAR com[][6] = { _T("COM1"),_T("COM2"),_T("COM3"),_T("COM4"),_T("COM5"),_T("COM6"),_T("COM7"),_T("COM8"),_T("COM9") };
for (int i = 0; i < 9; i++)
	m_Combo_Com.AddString(com[i]);
m_Combo_Com.SetCurSel(0);//默认显示第1个串口号

//设波特率组合列表框
TCHAR baud[][7] = { _T("9600"),_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200"),_T("128000"),_T("230400") };
for (int i = 0; i < 9; i++)
	m_Combo_Baud.AddString(baud[i]);
m_Combo_Baud.SetCurSel(2);//默认显示第3个波特率

//设校验位组合列表框
TCHAR check[][7] = { _T("None"),_T("Odd"),_T("Even") };
for (int i = 0; i < 3; i++)
	m_Combo_Check.AddString(check[i]);
m_Combo_Check.SetCurSel(0);//默认显示无校验


//设数据位组合列表框
TCHAR data[][2] = { _T("8"),_T("7"),_T("6") };
for (int i = 0; i < 3; i++)
	m_Combo_Data.AddString(data[i]);
m_Combo_Data.SetCurSel(0);

//设停止位组合列表框
TCHAR stop[][2] = { _T("1"),_T("2") };
for (int i = 0; i < 2; i++)
	m_Combo_Stop.AddString(stop[i]);
m_Combo_Stop.SetCurSel(0);

2 问题分析与解决

根据我们的预期:串口号COM1,波特率38400,校验None,数据8,停止位1;
那么CComboBox下拉框的选项序号依,代码逻辑没问题,

m_Combo_Com.SetCurSel(0);//默认显示第1个串口号COM1
m_Combo_Baud.SetCurSel(2);//默认显示第3个波特率38400
m_Combo_Check.SetCurSel(0);//默认显示无校验
m_Combo_Data.SetCurSel(0);//默认显示第1个
m_Combo_Stop.SetCurSel(0);//默认显示第1个

我们来看看下拉框里面实际选项,发现与我们上面添加的顺序也不完全一致 (有的顺序、有的逆序、有的无序号)

在这里插入图片描述
为了保证,我下拉框现实的顺序我们们添加的顺序一致,
在CComboBox控件的属性中找到 排序,将排序设为 False,这样下拉框选项顺序与添加顺序一致了。

在这里插入图片描述

在这里插入图片描述
把这几个CComboBox控件的 排序都设置文False后,再次验证效果:

与预设完全一致
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到