【52】MFC入门到精通——(CComboBox)下拉框选项顺序与初始化不一致,默认显示项也不一致
文章目录
- 1 问题描述
- 2 问题分析与解决
上一讲,我们实现了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后,再次验证效果:
与预设完全一致