用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,但是实际好像没打开。帮帮忙啊。

解决方案 »

  1.   

    if (lLastError = g_signalCom.Open("com1",this) != ERROR_SUCCESS)
    这样能打开吗?
      

  2.   

    这样是能打开的,这个问题先不管,先帮我看看第一个问题啊。那个页面切换时没法选择com啊
      

  3.   

    不是很明白你的第一个问题,是不是要在OnKillActive做点什么。
      

  4.   

    就是我选择哪个用那个,或者不选择,假设默认的是COM2,我就直接用COM2,如果默认不是COM2,我就从l列表框里选择为COM2
      

  5.   

    哦,可能要初始化。CComboBox* pmyComboBox = GetDlgItem(IDC_COMBO_SPList);
    pmyComboBox->SetCurSel(0);
    pmyComboBox->GetWindowText(m_strComPort3);
    ////((CEdit*)GetDlgItem(IDC_COMBO_SPList))->GetWindowText(m_strComPort3);