1. 程式人生 > >MFC中使用串列埠控制元件

MFC中使用串列埠控制元件

1. 開啟串列埠埠

首先通過讀取登錄檔,獲取可用的串列埠埠

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;
}
然後通過VS2012中的串列埠元件IDC_MSCOMM1 (ActiveX Control)來開啟串列埠
		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)