当前位置:C++技术网 > 资讯 > 多个对话框怎么调用一个串口控件?

多个对话框怎么调用一个串口控件?

更新时间:2016-11-03 14:21:53浏览次数:1+次

基于mfc的单文档应用程序,将窗口分割为左右两块,左边窗格嵌入Dialog,基类是CFormView,放了一个串口MSComm控件。该对话框调用了一个非模态对话框,图上中间那个对话框,请问此非模态对话框怎么利用串口控件发送数据?如果自定义消息的话,接收消息的窗口句柄怎么获得。


C++技术网解答:

    整理一下问题,多个非模态对话框,要利用同一个串口控件来发送数据,不知道如何实现?

    这个问题,是共享资源或者叫做共享变量的一个应用。多个对话框都要操作同一个串口控件,而且这个串口控件是一开始就创建好的。所以,才需要不同的对话框都能够访问到这个串口控件。

    因为非模态对话框是动态创建的,也可能是预先创建的,只是,动态显示的。不管怎么样,反正串口控件和对话框没有直接关系。那么一个对话框和串口控件的关系就是窗口间的通信问题。

    所以,整理的结果:

1.对话框如何与串口控件通信,或者如何操作串口控件?

2.多个对话框如何共享使用同一个串口控件?

3.如何使用串口控件发送数据?

第一个问题:

    想要操作串口控件,只要能够访问串口控件即可。串口控件也是一个窗口,MFC封装后,也是有一个控件类。而对话框也是有一个窗口类操作的。所以我们可以将这两个类对象作为框架窗口类的成员,而且是public访问权限。那么框架窗口对象是可以通过MFC获取的,比如获取父窗口,可以得到父窗口的对象指针,然后就可以获取到串口控件对象,然后就可以操作串口控件了。

    也就是说,我们是利用同一个父窗口这个桥梁,来达到访问父窗口的公共成员变量的。这也是很常见的做法。


第二个问题:

    多个对话框要访问同一个串口控件,和一个对话框访问同一个串口控件没有太大的区别。实现的方法是将所有的对话框放在同一个父窗口对象中管理。还是通过父窗口这个桥梁来实现。需要注意的是,多个对话框共享访问同一个串口控件,需要进行互斥访问。一个对话框已经打开了串口,其他对话框就不能关闭再打开。


第三个问题:

    MSComm串口控件是一个ActiveX控件,是COM组件。所以,控件都是封装好的,只需要调用控件的成员函数即可。然后按照函数的需要,提供参数即可。