vc6.0 如何在一个对话框中调用另一个对话框的MScom控件

时间:2022-08-30 00:01:58
我在一个对话框里创建另一个对话框的时候CKeyDlg dlg(this) ; dlg.DoModal ();
然后在另一个对话框中设置GetParent()->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata)); 
为什么总是出来SetOutput  is not member of CWnd 呢~

15 个解决方案

#1


要先转换一下
(这里写你的类型)(GetParent()->GetDlgItem(IDC_MSCOMM2))
->SetOutput(COleVariant(keydata)); 

#2


要转换成SetOutput这个函数所在的类,不然出来SetOutput is not member of CWnd错误

#3


引用 1 楼 zjfhgdx 的回复:
要先转换一下
(这里写你的类型)(GetParent()->GetDlgItem(IDC_MSCOMM2))
->SetOutput(COleVariant(keydata));

 还是不行啊(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata)));
还是有错误'SetOutput' : is not a member of 'CWnd'

#4


加错括号了吧?

#5


(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
复制过去试试

#6


引用 5 楼 zjfhgdx 的回复:
(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
复制过去试试

很谢谢你啊 但还是老问题啊

#7


(CComDlg *)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
试下

#8


先说一些CKeyDlg的风格应该是WS_POPUP风格的,这个风格用GetParent()是得不到“正确”父窗口的,因为它的真正父窗口是Frame窗口
解决方法,CDialog类中有一个m_pParentWnd成员,通过这个可以得到传进去的this指针

#9


正确写法:

((父窗口指针)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata));

#10



((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata));

#11


多谢各位啊 但这个问题还是没法解决啊 还是'SetOutput' : is not a member of 'CWnd'  因为CMSComm控件不是本来就有的 而是后面加进去的 是不是就是不能再引用它的函数呢~

#12


希望做过多个对话框共用一个串口控件的 朋友帮下忙啊

#13


你做了强制类型转换吗  
这种程序 我经常做啊 

#14



((CMSComm*)((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));

#15


引用 14 楼 wuyan6293 的回复:
C/C++ code

((CMSComm*)((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
执行完楼上的代码后,出现内存不能为read的提示,很郁闷,可否指教一二?

#1


要先转换一下
(这里写你的类型)(GetParent()->GetDlgItem(IDC_MSCOMM2))
->SetOutput(COleVariant(keydata)); 

#2


要转换成SetOutput这个函数所在的类,不然出来SetOutput is not member of CWnd错误

#3


引用 1 楼 zjfhgdx 的回复:
要先转换一下
(这里写你的类型)(GetParent()->GetDlgItem(IDC_MSCOMM2))
->SetOutput(COleVariant(keydata));

 还是不行啊(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata)));
还是有错误'SetOutput' : is not a member of 'CWnd'

#4


加错括号了吧?

#5


(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
复制过去试试

#6


引用 5 楼 zjfhgdx 的回复:
(CComDlg)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
复制过去试试

很谢谢你啊 但还是老问题啊

#7


(CComDlg *)(GetParent()->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
试下

#8


先说一些CKeyDlg的风格应该是WS_POPUP风格的,这个风格用GetParent()是得不到“正确”父窗口的,因为它的真正父窗口是Frame窗口
解决方法,CDialog类中有一个m_pParentWnd成员,通过这个可以得到传进去的this指针

#9


正确写法:

((父窗口指针)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata));

#10



((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2)->SetOutput(COleVariant(keydata));

#11


多谢各位啊 但这个问题还是没法解决啊 还是'SetOutput' : is not a member of 'CWnd'  因为CMSComm控件不是本来就有的 而是后面加进去的 是不是就是不能再引用它的函数呢~

#12


希望做过多个对话框共用一个串口控件的 朋友帮下忙啊

#13


你做了强制类型转换吗  
这种程序 我经常做啊 

#14



((CMSComm*)((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));

#15


引用 14 楼 wuyan6293 的回复:
C/C++ code

((CMSComm*)((CComDlg*)m_pParentWnd)->GetDlgItem(IDC_MSCOMM2))->SetOutput(COleVariant(keydata));
执行完楼上的代码后,出现内存不能为read的提示,很郁闷,可否指教一二?