MFC中ActiveX控件的使用
来源:互联网 发布:高校网络散布谣言 编辑:程序博客网 时间:2024/06/06 00:22
Windows系的开发做的很少,也晕乎晕乎的。
最近学习了下Arcgis的开发,话说C++开发相关的资料还真少。好不容易从网上找了篇资料,算是入了门(或者还在门外头,但是找到门了)。感谢这位同仁:
http://blog.csdn.net/yiersl/article/details/16856479
在MFC中添加上MapControl的控件之后。手动添加一个IMapControl2Ptr类型的变量,然后用手动添加的变量再去手动的与控件关联,才能进一步调用或者设置控件的方法和属性。我上一次使用MFC是什么时候来着?貌似很久远了。不过我依稀记得,为控件添加变量这种事情在MFC当中点点鼠标就能完成了啊,于是我就试了一下。过程虽然很艰辛,但最后终究是实现了。在这个过程中,发现了几个不理解认为很奇怪的地方:
① 通过类向导添加上的变量,在使用其方法时,跟手动添加的变量(指针类型)方法的原型不一样。
② 添加变量的过程中,还为控件创建了相应的源文件和头文件。
上网搜了各种关键词,资料少之又少,但感觉还是有点明白了,不知道理解的对不对,但至少临时能解释的通,暂且先记下来。
① 不一样的原因在于,手动添加的变量跟类向导创建的变量本来就不是一个类型。手动添加的变量是Com(控件)中的一个接口(interface)的指针,而类向导添加的是控件对应的COM对象的变量。稍微了解下原理,控件就是一个标准的COM对象,而该对象包含了多个接口。手动添加时变量直接指向了对象中的某个接口(此处的接口是COM中的概念,其中会包含多个方法和属性)。而类向导添加的变量是COM对象,使用它其中的方法时调用的是控件(对象)中默认的接口中的方法,或者是对象对外提供的方法是其中接口的方法的又一层封装,因此,两种方式调用下原型会有差别。
② 添加新的源文件和头文件肯定是MFC的实现机制的原因,但为什么在为按钮等控件添加变量时不会出现这种情况呢?有可能是因为控件本身分为windows标准控件(如按钮文本框等只能用在MFC中)和ActiveX控件(可以用在Web等地方)两种。而标准控件已经在MFC中做了封装,不需要添加源文件也会知道他的类结构,而ActiveX控件是第三方提供的,为了能添加它的变量,就得需要了解他的类型结构,当然,这应该得需要在实现ActiveX控件的时候,还得能告诉使用者如果要声明变量的话,需要定义成什么样的类型。
在MFC中,标准的使用方式应该是后者也就是使用类向导添加变量的方式,而手动添加的方式其实是使用COM的方式。为了能以COM的形式使用,MFC中使用下面的方法步骤:
① CWnd *pWnd = GetDlgItem(ID_XXXX); 使用控件ID获取控件窗口指针
② LPUNKNOWN pUnk = pWnd->GetControlUnknown();返回CWnd对象所代表的OLE控件的IUnknown接口的指针。如果这个对象不代表一个OLE控件,则返回值为NULL。(IUnknown是COM中的概念,实现COM必须实现的一项)。
③ pUnk->QueryInterface(IID_XXXXXXXXX, (LPVOID*)&XXXXXPtr); 将接口与对象指针(第二个参数)关联。注意第一个参数并不是控件在MFC中的ID,而是COM中接口的ID。
- MFC中ActiveX控件的使用
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- MFC的ActiveX控件在Web中使用DoModal()显示对话框时,为非阻塞的
- 刚刚常识在应用程序中使用ActiveX控件 MFC强大到了可怕的程度
- 基于MFC的ActiveX控件
- MFC ActiveX控件与ATL ActiveX控件的比较
- MFC ActiveX控件与ATL ActiveX控件的比较
- MFC ActiveX控件与ATL ActiveX控件的比较 .
- ldconfig命令详解
- Spring4.0学习笔记002——Spring应用初识
- 杭电5605 geometry
- 图像处理与机器视觉网络资源收罗——倾心大放送
- 处理多维度变化——桥接模式(一):跨平台图像浏览系统
- MFC中ActiveX控件的使用
- 关于iOS9之后 获取用户是否安装sim卡 的方法
- android jaudiotagger读取mp3和Flac音频操作
- HP pavilion 安装ubuntu14.04后无线无法使用问题总结
- OkHttp的使用
- iOS 用for循环写了一排button
- HDU 2088 Calculate S(n)
- bzoj4390【Usaco2015 Dec】Max Flow
- 二分+贪心 Codeforces614D Skills