MFC中使用串列埠控制元件
阿新 • • 發佈:2019-01-27
1. 開啟串列埠埠
首先通過讀取登錄檔,獲取可用的串列埠埠
然後通過VS2012中的串列埠元件IDC_MSCOMM1 (ActiveX Control)來開啟串列埠int GetComList_Reg(CComboBox * CCombox) { HKEY hkey; int result; int i = 0; CString strComName;//串列埠名稱 CString strDrName;//串列埠詳細名稱 result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm"), NULL, KEY_READ, &hkey); if (ERROR_SUCCESS == result) // 開啟串列埠登錄檔 { TCHAR portName[0x100], commName[0x100]; DWORD dwLong, dwSize; CCombox->ResetContent(); do { dwSize = sizeof(portName) / sizeof(TCHAR); dwLong = dwSize; result = RegEnumValue(hkey, i, portName, &dwLong, NULL, NULL, (LPBYTE)commName, &dwSize); if (ERROR_NO_MORE_ITEMS == result) { // 列舉串列埠 break; // commName就是串列埠名字"COM2" } strComName = commName; CCombox->AddString(strComName); //只新增串列埠名即可,不新增詳細名 i++; } while (1); RegCloseKey(hkey); } CCombox->SetCurSel(0); return i; }
CString TempPort;
m_combo_ComSel.GetWindowText(TempPort);
TempPort = TempPort.Mid(3, 2);
m_mscom.put_CommPort(_wtoi(TempPort));
需注意:在用這個元件的時候,需呼叫put_CommPort函式來設定串列埠的埠號,但是這個埠號是一個數組,而在我的程式碼中是一個字串(CComboBox的值),所以這個地方需要從字串中提取一下數值。
另外,還有一種方法:
在下拉選單中,將所有的串列埠埠都填上
int i;
for (i=0; i < 15; i++)
{
str_com_sel.Format(_T("COM %d"), (i + 1));
m_combo_ComSel.InsertString(i, str_com_sel);
}
m_combo_ComSel.SetCurSel(0);
然後在開啟串列埠時,直接獲取CComboBox的列表中的某個索引值。
m_mscom.put_CommPort(m_combo_ComSel.GetCurSel() + 1)