用CPropertySheet建立三个属性页,打开每个属性页的时候,都会出现一个串口配置的对话框,串口的选择是CComboBox下拉列表框,想着如果我不点击就用上面显示的那个,点击下拉就用下拉选择的那个。我重载了OnSetActive函数,但是这样的话一切换的这个页面就自动选择了里面显示的那个,没法选择了。而且虽然能选择到串口,但是实际的串口好像没打开啊。代码如下:BOOL CComSelect1::OnSetActive()
{
// TODO: 在此添加专用代码和/或调用基类 ((CEdit*)GetDlgItem(IDC_COMBO_SPList))->GetWindowText(m_strComPort3); LONG lLastError = ERROR_SUCCESS;
CSerial::EBaudrate eBaudrate = CSerial::EBaudUnknown;
switch (m_nBaudrateIndex)
{
case 0: eBaudrate = CSerial::EBaud1200; break;
case 1: eBaudrate = CSerial::EBaud2400; break;
case 2: eBaudrate = CSerial::EBaud9600; break;
case 3: eBaudrate = CSerial::EBaud14400; break;
case 4: eBaudrate = CSerial::EBaud19200; break;
case 5: eBaudrate = CSerial::EBaud38400; break;
case 6: eBaudrate = CSerial::EBaud56000; break;
case 7: eBaudrate = CSerial::EBaud57600; break;
case 8: eBaudrate = CSerial::EBaud115200; break;
default: ASSERT(false); break;
} CSerial::EDataBits eDataBits = CSerial::EDataUnknown;
switch (m_nDataIndex)
{
case 0: eDataBits = CSerial::EData5; break;
case 1: eDataBits = CSerial::EData6; break;
case 2: eDataBits = CSerial::EData7; break;
case 3: eDataBits = CSerial::EData8; break;
} CSerial::EParity eParity = CSerial::EParUnknown;
switch (m_nParityIndex)
{
case 0: eParity = CSerial::EParNone; break;
case 1: eParity = CSerial::EParOdd; break;
case 2: eParity = CSerial::EParEven; break;
case 3: eParity = CSerial::EParMark; break;
case 4: eParity = CSerial::EParSpace; break;
default: ASSERT(false); break;
} CSerial::EStopBits eStopBits = CSerial::EStopUnknown;
switch (m_nStopIndex)
{
case 0: eStopBits = CSerial::EStop1; break;
case 1: eStopBits = CSerial::EStop1_5; break;
case 2: eStopBits = CSerial::EStop2; break;
default: ASSERT(false); break;
} if (lLastError = g_signalCom.Open(m_strComPort3,this) != ERROR_SUCCESS)
{
AfxMessageBox(_T("Unable to open COM-port"),MB_ICONSTOP|MB_OK);
return TRUE;
} lLastError = g_signalCom.Setup(eBaudrate,eDataBits,eParity,eStopBits);
if (lLastError != ERROR_SUCCESS)
AfxMessageBox(_T("Unable to open COM-port"),MB_ICONSTOP|MB_OK);
// Register only for the receive event
lLastError = g_signalCom.SetMask(
CSerial::EEventBreak
|CSerial::EEventCTS
|CSerial::EEventDSR
|CSerial::EEventError
|CSerial::EEventRing
|CSerial::EEventRLSD
|CSerial::EEventRecv
|CSerial::EEventRcvEv
|CSerial::EEventSend
); return CPropertyPage::OnSetActive();
}
这样虽然执行这个函数没出现Unable to open COM-port,但是实际好像没打开。帮帮忙啊。
{
// TODO: 在此添加专用代码和/或调用基类 ((CEdit*)GetDlgItem(IDC_COMBO_SPList))->GetWindowText(m_strComPort3); LONG lLastError = ERROR_SUCCESS;
CSerial::EBaudrate eBaudrate = CSerial::EBaudUnknown;
switch (m_nBaudrateIndex)
{
case 0: eBaudrate = CSerial::EBaud1200; break;
case 1: eBaudrate = CSerial::EBaud2400; break;
case 2: eBaudrate = CSerial::EBaud9600; break;
case 3: eBaudrate = CSerial::EBaud14400; break;
case 4: eBaudrate = CSerial::EBaud19200; break;
case 5: eBaudrate = CSerial::EBaud38400; break;
case 6: eBaudrate = CSerial::EBaud56000; break;
case 7: eBaudrate = CSerial::EBaud57600; break;
case 8: eBaudrate = CSerial::EBaud115200; break;
default: ASSERT(false); break;
} CSerial::EDataBits eDataBits = CSerial::EDataUnknown;
switch (m_nDataIndex)
{
case 0: eDataBits = CSerial::EData5; break;
case 1: eDataBits = CSerial::EData6; break;
case 2: eDataBits = CSerial::EData7; break;
case 3: eDataBits = CSerial::EData8; break;
} CSerial::EParity eParity = CSerial::EParUnknown;
switch (m_nParityIndex)
{
case 0: eParity = CSerial::EParNone; break;
case 1: eParity = CSerial::EParOdd; break;
case 2: eParity = CSerial::EParEven; break;
case 3: eParity = CSerial::EParMark; break;
case 4: eParity = CSerial::EParSpace; break;
default: ASSERT(false); break;
} CSerial::EStopBits eStopBits = CSerial::EStopUnknown;
switch (m_nStopIndex)
{
case 0: eStopBits = CSerial::EStop1; break;
case 1: eStopBits = CSerial::EStop1_5; break;
case 2: eStopBits = CSerial::EStop2; break;
default: ASSERT(false); break;
} if (lLastError = g_signalCom.Open(m_strComPort3,this) != ERROR_SUCCESS)
{
AfxMessageBox(_T("Unable to open COM-port"),MB_ICONSTOP|MB_OK);
return TRUE;
} lLastError = g_signalCom.Setup(eBaudrate,eDataBits,eParity,eStopBits);
if (lLastError != ERROR_SUCCESS)
AfxMessageBox(_T("Unable to open COM-port"),MB_ICONSTOP|MB_OK);
// Register only for the receive event
lLastError = g_signalCom.SetMask(
CSerial::EEventBreak
|CSerial::EEventCTS
|CSerial::EEventDSR
|CSerial::EEventError
|CSerial::EEventRing
|CSerial::EEventRLSD
|CSerial::EEventRecv
|CSerial::EEventRcvEv
|CSerial::EEventSend
); return CPropertyPage::OnSetActive();
}
这样虽然执行这个函数没出现Unable to open COM-port,但是实际好像没打开。帮帮忙啊。
这样能打开吗?
pmyComboBox->SetCurSel(0);
pmyComboBox->GetWindowText(m_strComPort3);
////((CEdit*)GetDlgItem(IDC_COMBO_SPList))->GetWindowText(m_strComPort3);