文章目錄
- 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后,再次驗證效果:
與預設完全一致