用CPropertySheet建立三个属性页,存在问题 在线等

神马技术 2011-02-23 10:09:46
用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,但是实际好像没打开。帮帮忙啊。
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
手机写程序 2011-02-23
  • 打赏
  • 举报
回复
不是很明白你的第一个问题,是不是要在OnKillActive做点什么。
神马技术 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eyey1 的回复:]
if (lLastError = g_signalCom.Open("com1",this) != ERROR_SUCCESS)
这样能打开吗?
[/Quote]
这样是能打开的,这个问题先不管,先帮我看看第一个问题啊。那个页面切换时没法选择com啊
Eleven 2011-02-23
  • 打赏
  • 举报
回复
你Debug下调试一下嘛
手机写程序 2011-02-23
  • 打赏
  • 举报
回复
if (lLastError = g_signalCom.Open("com1",this) != ERROR_SUCCESS)
这样能打开吗?
神马技术 2011-02-23
  • 打赏
  • 举报
回复
有人没啊
手机写程序 2011-02-23
  • 打赏
  • 举报
回复
哦,可能要初始化。

CComboBox* pmyComboBox = GetDlgItem(IDC_COMBO_SPList);
pmyComboBox->SetCurSel(0);
pmyComboBox->GetWindowText(m_strComPort3);
////((CEdit*)GetDlgItem(IDC_COMBO_SPList))->GetWindowText(m_strComPort3);
神马技术 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 eyey1 的回复:]
不是很明白你的第一个问题,是不是要在OnKillActive做点什么。
[/Quote]
就是我选择哪个用那个,或者不选择,假设默认的是COM2,我就直接用COM2,如果默认不是COM2,我就从l列表框里选择为COM2

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧