光盘刻录系列之刻录时状态显示

来源:互联网 发布:nginx centos 重启 编辑:程序博客网 时间:2024/06/04 19:04

刻录时,能提供一些交互对刻录大文件来说可以说是一款好软件的必要素质之一。为实现刻录状态的显示,需要实现DDiscFormat2DataEvents这个,我不知道怎么实现。我都不知道这是啥东西。参考老外有写一程序都吃力。呜呜呜.....

使用了很多的微软宏,我笨呀,所以我就把宏展开来开啦。纪念一下有那些宏,以及有什么用吧!还有就是要与界面交互,要支持消息循环,要有持有一个界面句柄,就封装一个类继承MFC的消息循环的基础类CCmdTarget(这个忘了说啦,这是一个MFC程序),然后DECLARE_DYNAMIC宏、DECLARE_MESSAGE_MAP()宏、IMPLEMENT_DYNAMIC(CDiscFormatDataEvent, CCmdTarget)三个宏,将这个类加入可以处理消息的循环列表中,获取到制定的消息时,就分配给这个类处理。

其中DDiscFormat2DataEvents这个接口的实现,需要COM组件的知识。关于COM组件,到现在我只知道COM的作用,怎么使用和实现接口还是很模糊。说错啦请温柔纠正,不要喷我啊。

CDiscFormatDataEvent类继承了消息循环类CCmdTarget类,以及内部有一个实现DDiscFormat2DataEvents接口的内部类XFormatDataEvents。高手使用的是一系列的宏:DECLARE_INTERFACE_MAP(),这个宏主要声明一个静态的(static)接口数组,(static)接口Map,构成一个类似链表,将这个接口实现加入到系统维护的链表中,然后系统查找与调用接口实现的函数。宏在类中声明的是static 类型的数组以及包含头指针以及获取头指针函数的函数指针以及此类的piid和在虚函数表中从m_unknown起始位置到这个类的偏移位。BEGIN_INTERFACE_MAP宏、INTERFACE_PART(CDiscFormatDataEvent、IID_IDispatch、FormatDataEvents)、INTERFACE_PART(CDis从FormatDataEvent、IID_DDiscFormat2DataEvents、FormatDataEvents),这些宏功能是实现上面那些变量以及成员函数,这些东西来自于DECLARE_INTERFACE_MAP,将这些接口IDispatch、DDiscFormat2DataEvents接口地址赋值给map数组。内只有操作这些数组的函数,不用理会。

前面说那么多,如果有COM的知识,这些都知道,以及理解,像我就没有,就恶补了COM技术内幕这本书。了解了一点。还是不是很精。但是这个类最主要的部分是要自己实现IDataFormatDataEvents接口中的Update函数

涉及到多线程中接口的参数的调整。

Update函数中使用了IDiscFormat2DataEventArgs,有如图IDiscFormat2DataEventArgs.png中包含的几个函数。

目前就是这样理解的,其中还有很多没理解透彻。

如果不用MFC的类支持,要与web交互,比如cef框架,该怎么改写?




0 0
原创粉丝点击