开发基于OpenGL的ActiveX控件的方法研究[1]
开发基于OpenGL的应用程序,必须先了解OpenGL的库函数

开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。
它采用C语言风格,提供大量的函数来进行图形的处理和显示。
OpenGL库函数的命名方式非常有规律。
所有OpenGL函数采用了以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库,从函数名后面中还可以看出需要多少个参数以及参数的类型。
I代表int型,f代表float型,d代表double型,u代表无符号整型。
例如glVertex3fv()表示了该函数属于gl库,参数是三个float型参数指针。
我们用glVertex*()来表示这一类函数。
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。
从图可以看出,gl是核心,glu是对gl的部分封装。
glx、agl、wgl 是针对不同窗口系统的函数。
glut是为跨平台的OpenGL程序的工具包,比aux功能强大。
扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。
下面逐一对这些库进行详细介绍。
1.OpenGL核心库核心库包含有115个函数,函数名的前缀为gl。
这部分函数用于常规的、核心的图形处理。
此函数由gl.dll来负责解释执行。
由于许多函数可以接收不同数以下几类。
据类型的参数,因此派生出来的函数原形多达300多个。
核心库中的函数主要可以分为以下几类函数:∙绘制基本几何图元的函数:glBegain()、glEnd()、glNormal*()、glVertex*();∙矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport();∙颜色、光照和材质的函数:如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial();∙显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();∙纹理映射函数:主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*();∙特殊效果函数:融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*();∙光栅化、象素操作函数:如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel();∙选择与反馈函数:主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer();∙曲线与曲面的绘制函数:生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*();∙状态设置与查询函数:glGet*()、glEnable()、glGetError()。
activex组件的调用方法

activex组件的调用方法
ActiveX组件是一种可重用的二进制代码,可以在不同的应用程序中使用。
使用ActiveX组件可以提高应用程序的功能和性能。
调用ActiveX组件可以通过以下步骤实现:
1. 在应用程序中添加对ActiveX组件的引用。
2. 创建ActiveX组件的对象。
3. 调用ActiveX组件的方法和属性。
在Visual Basic中,可以使用以下代码来调用ActiveX组件:
' 添加对ActiveX组件的引用
' 如果ActiveX组件位于COM服务器上,必须注册COM服务器
Dim obj As New ComponentName
' 创建ActiveX组件的对象
obj.MethodName
' 调用ActiveX组件的方法和属性
在C#中,可以使用以下代码来调用ActiveX组件:
// 添加对ActiveX组件的引用
// 如果ActiveX组件位于COM服务器上,必须注册COM服务器
ComponentName obj = new ComponentName();
// 创建ActiveX组件的对象
obj.MethodName();
// 调用ActiveX组件的方法和属性
需要注意的是,调用ActiveX组件时可能会遇到版本兼容性问题。
为了避免这种问题,应该确保ActiveX组件的版本与应用程序的版本兼容。
如果需要升级ActiveX组件的版本,应该进行充分的测试和验证,确保没有任何兼容性问题。
做一个OpenGL控件

做一个OpenGL控件做一个OpenGL控件OpenGL是一个独立于窗口的图形库,而图形最终是在窗口系统里绘制出来的,那么OpenGL的绘图命令是怎么在窗口里生成输出的呢?这就是各个系统上的OpenGL实现者需要做的工作了。
在Windows里是通过wgl库完成的,在X-Windows里是通过glx服务器来完成的,至于这些OpenGL实现具体是怎么工作的,请参考sgi 发布的sample implement源码,不过那个代码是用C写的。
在MS-Windows里,wgl库负责将OpenGL的绘制设备RenderContext与GDI的DeviceContext联系起来,使得发到OpenGL的RC里的命令生成的位图能够在GDI DC里绘制出来,你可以把它想象成OpenGL在RC里有一个FrameBuffer,记录着生成的图案,而wgl则负责把FrameBuffer的内容BitBlt到DC上。
当然,这并不是它实际的工作方法,如果想了解更多请参考SGI发布的SDK 资料或联系MS公司。
为了使GDI DC能够接受OpenGL RC的输出,必须为DC选定特别的像素格式,然后建立RC,再用wglMakeCurrent把当前要使用的RC和DC联系起来。
此后我们就可以用OpenGL命令正常工作了。
在一个程序里可以创建多个RC和多个DC,程序中的OpenGL命令会发到被wglMakeCurrent指定为当前的那一组合中。
我并不认为这个初始化过程是个很有意思的工作,这个世界上有很多聪明的程序员也这么想,所以他们发明了glaux库和glut库。
glaux是在著名的OpenGL Programmer Guide里提出的,这本书是OpenGL编程的官方文档,因为它的封皮是红色的,所以通常简称为RedBook。
故名思意,glaux是一套输助库,它使得你无须关心在具体窗口系统里初始化、消息响应的细节,而是使用传统的c/dos程序风格编制OpenGL程序。
在Authorware中使用ActiveX控件编程.

在Authorware中使用ActiveX控件编程ActiveX控件,以前被称作 OLE 控件,是一个标准的用户接口元素,能够快速地把窗体和对话框组装起来。
ActiveX控件还使 Internet 更加生动,为 World Wide Web 页增加了有趣的新功能。
在Authorware4.0及其以上版本中,都增加了对ActiveX控件的支持。
新增的ActiveX Xtra,允许用户在Authorware文件中插入绝大多数ActiveX控件;使用起来,就如同在任何其它支持ActiveX控件的语言环境中一样,方便而快捷。
利用ActiveX Xtra函数功能可方便地管理、调度本机的ActiveX控件资源,包括控件的属性、事件和方法,只需在Authorware文件内部填充ActiveX控件的属性、事件和方法值即可。
ActiveX Xtra的使用范围就象ActiveX控件的可变性一样没有限制。
有各种各样的控件,可以用于浏览INTERNET、创建扩展页、甚至探索虚拟世界。
本文将介绍笔者用ActiveX控件在Authorware中编程的基本方法。
㈠如何插入一个ActiveX控件当您插入一个ActiveX控件到Authorware文件里,它将被包含于一个现场演员Xtra图标中;要如何插入ActiveX控件呢?一般步骤如下:⒈多数ActiveX控件提供有它们自己的安装程序。
紫龋范胍褂玫腁ctiveX控件已被正确安装于WINDOWS系统中。
⒉在流程线上,您想要插入该现场演员Xtra图标的位置单击,这时候出现粘贴手标帜。
⒊从系统菜单上,选择Insert→Control→ActiveX,这时弹出“Select ActiveX Control”(选择ActiveX控件)对话框(如下图)。
⒋在对话框里的Control Description(控件描述)列表框中,单击选定您所需的ActiveX控件,然后单击“OK”按钮。
这时弹出“ActiveX Control Properties”(ActiveX控件属性)对话框(如下图)。
【转】C#开发ActiveX可行性研究

【转】C#开发ActiveX可⾏性研究由于公司需要开发WEB打印模块,⽽且打印模块⼜⽐较复杂,要让⽤户⾃⼰能设计摸板,能控制格式,想来想去只能⽤ActiveX才能实现,期间鄙⼈也研究了⽔晶报表,鄙⼈总结出来⼀条,⽔晶报表做报表⾏,但是如果要想做帐单的打印,还是不⾏的,第⼀就是效率不⾏,第⼆就是格式控制能⼒不强,不过效率问题,鄙⼈后⾯也差不多解决了,具体解决⽅法鄙⼈计划在下⼀篇博客⾥写出来,还包括⾃定义报表传⼊参数的问题鄙⼈也解决了,最后为了能⽅便客户鄙⼈研究了ActiveX(因为我们公司做的是产品,所以东西不做到好⽤不⾏).本来我是想⽤VC++开发ActiveX怎奈技术有限,想实现VC++ 和服务器交互还有⼀定难度,⽽且也没办法实现打印,所以转到了C#下⾯开发.开发ActiveX主要还是在CNBLOGS⾥找了篇⽂章⽐较受益,红马的使⽤C#开发ActivX系列,照着⽂章把算是打印模块也开发完毕了,期间为实现了JS掉⽤Activx也测试了⽆数次,最后还是跌跌撞撞做好了.后⾯⼜要开发⾝份证扫描必须得⽤ActivX调⽤JS,后⾯⼜找了这篇⽂章,按这位⽼兄的⽅法也实现了.还要注意⼀点IE7下如果你写的ActiveX⽤不了,不是因为你写的程序有问题,⽽是⼀个安全设置的问题,我也是研究了很久,具体哪个设置我⼀下忘记了,因为我的IE换成IE6了,明天装IE7了再告诉⼤家.不过最后我也总结出来了,⽤C#开发ActiveX是可以的,唯⼀的遗憾就是要装.NET,不过其实也是可以不装的,我也发⾏了两个版本,⼀个是不⽤装,⼀个是要装的,不⽤装的⽤飞信脱,但⽤了飞信脱后安装包太⼤了,建议还是就装下.NET吧,毕竟现在也快普及.NET了,如果⼤家还有不⽤飞信脱来实现不装.net的⽅法请告之.还有,其实ActiveX还可以实现⼀些JS没办法实现的功能,⽐如PUSH模式,我就⽤C#实现了⼀个PUSH模式,让C#和服务交互,然后当数据有改变时,就⽤C#调⽤JS的⽅法,这样就不⽤⽼是⼀直请求了.其实还可以⽤FLASH来实现的,但是我对AS脚本不熟悉,我⼀个朋友对这⽅⾯有些研究,如果⼤家有需要了解的话,我帮⼤家请教下我朋友.再就是鄙⼈研究了 IHTMLDocument IHTMLDocument2 IHTMLDocument3 正计划写个⽤C#来操作HTML的ACTIVEX,也许⽤C#操作HTML ⽐JS的效率⾼⽽且还不会有内存泄露问题,不过还没测试,现在完全还是构思中,摆在眼前还有个最⼤的问题!就是鄙⼈⼀直还不知道怎么调试ActiveX的,忘记⼤家有知道的,请告之.谢谢!还有鄙⼈这次也算是做了个⼤项⽬,也是我设计的,我也是开发主⼒,公司不⼤,也总结了很多经验,今后我会⼀⼀写出来.也希望⼤家能多多发表⾃⼰的经验,谢谢!最后再罗嗦⼀句,代码由于商业机密问题,鄙⼈不能贴出来,如果⼤家实在需要留下EMAIL我会发给⼤家!再提醒下⼤家! 如果有知道怎么调式ActivX的,⿇烦您请告之,谢谢了!。
基于MFC的ActiveX控件开发

基于MFC的ActiveX控件开发基于MFC的ActiveX控件开发ysm*******************ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web 应用中。
在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的;一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能。
MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较多,因此用MFC开发出来的控件相对会比较大,因此比较适于开发桌面ActivexX控件,尤其是有GUI界面的控件。
第三种就是基于ATL的,ATL可以说是专门面向COM开发的一套框架,使用了C++的模板技术,在运行时不需要依赖于类似MFC程序所需要的庞大的代码模块,更适合于Web应用开发。
本文介绍的是采用第二种方式,即应用MFC进行桌面可视控件开发的方法步骤,开发环境则是基于VC2005。
1.创建控件项目打开VC2005后,我们要先创建一个项目,在新建项目页的左侧选择Visual C++-MFC,在右侧选择MFC ActiveX控件,填上解决方案和项目名称,比如在这里我的项目名称是activexdemo1,解决方案名称是activexdemo。
然后进入控件向导页,在向导的第二页有个运行时许可证,选中这个的话会在生成控件的同时生成一个许可证文件,其他用户在使用这个控件的时候必须同时附有这个许可证,在此我们保持默认状态,不选。
下一页是关于项目中各部分的命名问题,可以根据需要自定义,这里就按默认的情况不做修改了。
下一页是选择控件基于哪种控件的扩展以及控件的一些基本特性。
如果新建的控件是基于某种特定控件的话,就在创建的控件基于下选择所要继承的控件名,否则就保持none。
基于OpenGL的ActiveX控件的实现

收稿日期:2004-05-17.第一作者简介:杨日容(1979.10~),女,在读硕士研究生.主要研究方向:控制理论及控制工程.E -mail :yangrirong @基于Open G L 的Active X 控件的实现杨日容,杨承志,杨晓洪(昆明理工大学信息工程与自动化学院,云南昆明 650051)摘要:ActiveX 控件是当前开发各种应用程序的一项重要技术,是一种能与其它程序交互通信的程序体系结构.Open G L 则是一种功能强大的三维图形开发工具,利用Open G L 可以生成真彩的三维动态场景.文章在介绍Open G L 及ActiveX 控件技术的基础上详细介绍了在Visual C ++6.0的环境下开发基于Open G L 的三维动画的方法,并把它封装为ActiveX 控件,最后把该控件应用到常用的演示文稿制作软件Powerpoint2000中,实现了在幻灯片中三维动画的显示与控制.关键词:Visual C ++;Open GL ;ActiveX 控件中图分类号:TP391172文献标识码:A 文章编号:1007-855X (2005)01-0045-03An Active X Control B ased on Open G LY ANG Ri 2rong ,Y ANG Cheng 2zhi ,Y ANG X iao 2hong(Faculty of Information Engineering and Automation ,Kunming University of Science and T echnology ,Kunming 650051,China )Abstract :ActiveX cont rol is t he most important technology in developing all kinds of application proce 2dures ,and it is t he f ramework of t he procedure to communicate wit h ot her procedures.Open GL is a powerf ul t hree -dimension cartoon developing tool.The overview of Open GL and ActiveX cont rol is first int roduced ,and t hen t he met hod of developing an ActiveX cont rol based on Open GL wit h Visual C ++6.0is p resented.Finally t he ActiveX cont rol is applied to t he slide software Powerpoint2000,and t he display and cont rol of t hree -dimension cartoon in t he slide are achieved.K ey words :Visual C ++;Open GL ;ActiveX cont rol0引言Open GL 是S GI 公司开发的三维图形库,它提供几何建模、坐标变换、颜色模式设置、光照和材质设置、纹理映射、实时动画、交互等功能,用户可以方便地利用这个图形库创建具有真实效果的三维模型.Open GL 的最大特点是独立于硬件设备、窗口系统和操作系统,用它编写的软件可以方便地在各种操作系统间移植.目前,包括Microsoft 公司、IBM 公司、SUN 等公司都采用了Open GL 图形标准.ActiveX 技术的理论规范为COM (组件对象模型),其前身是OL E 技术.ActiveX 技术中最常用的三种技术是ActiveX 文档、ActiveX 控件、ActiveX 脚本.其中ActiveX 控件是ActiveX 技术中重要的一项,它作为一种标准的用户接口元素,能够增强应用程序之间的通信能力.实际上ActiveX 控件是一个软件组件,可以把它插入到许多不同的程序中,并把它作为程序自身的一部分来使用.文中介绍了使用Visual C ++中的M FC 开发的一个基于Open GL 的ActiveX 控件的方法,并把该ActiveX 控件应用到Powerpoint2000中.1Active X 控件的创建由于ActiveX 的开发不依赖于语言,所以当前许多流行的编程语言如J ava ,Visual Basic ,Visual 第30卷第1期2005年2月 昆明理工大学学报(理工版)Journal of Kunming U niversity of Science and Technology (Science and Technology )Vol.30 No 11 Feb.2005C ++都支持ActiveX 控件的开发.常用的ActiveX 控件开发方法有M FC ,A TL ,BaseCt rl Framework 等.这里采用的开发工具是Windows 操作系统中广泛使用的应用程序框架M FC.1.1建立Active X 控件的框架首先利用VC ++6.0中的MFC ActiveX C ontrolWizard 建立控件的基本框架,该控件名为Aa.在设置项目的高级选项中把Loads properties asynchronously 选中,即采用异步方式加载控件,以提高系统的性能.1.2加入与Open G L 相关的静态库和头文件由于Open GL 仅仅只是一个图形函数库,因此必须在项目中加入与Open GL 相关的静态库和头文件,建立应用程序和Open GL 的联系.Open GL 静态库包括opengl32.lib ,glu32.lib ,glaux.lib ,添加Open GL 静态库的方法是打开菜单工程\设置,在弹出的对话框中选择Link 项,然后在对象\模块库中加入opengl32.lib ,glu32.lib ,glaux.lib ,这样就可以访问Open GL 函数了.加入头文件的方法打开St dAf x.h ,在文件尾部添加入头文件gl/glu.h ,gl/gl.h ,gl/glaux.h 以及af xtempl.h ,这样Visual C ++编译器就可以对Open GL 中的函数进行识别并编译.1.3利用Open G L 绘制三维图形Open GL 的最主要工作就是将二维物体和三维物体描绘至帧缓存.这些物体由一系列的描述物体几何性质的顶点或描述图像的像素组成,Open GL 执行一系列的操作把这些数据最终转化成像素数据并在帧缓存中形成最后的结果.利用Open GL 绘制图形的原理如图1所示.利用Open GL 绘制三维图形的基本步骤:(1)设置像素格式,建立着色描述表并把它当前化.只有建立着色描述表并把它当前化,绘制的物体才能显示.像素格式则反映了Open GL 的像素缓存是单缓存还是双缓存、颜色模式、绘制风格等.(2)调用Open GL 函数绘制图形,包括建立三维模型、材质设置、定义观察区域、设置投影模式、建立光照模型、图形平移、旋转等.(3)删除着色描述表和设备描述表,释放资源.Aa 控件用到的主要函数见表1.表1 主要函数表T ab.1 Main f unctions 函数主要作用bSetup PixelFormat ()设置像素格式Init ()着色表的创建及当前化PreCreateWindow ()设定Open G L 风格OnSize ()建立视点、启动透视变换、建立透视体DrawScene ()具体绘制三维图形及动画FirePause ()控制动画的停止FirePlay ()控制动画的转动OnDestroy ()删除着色描述表、设备描述表OnLButtonDown ()鼠标响应计算机动画是指应用程序或工具生成一系列的静态画面,然后通过画面的连续播放来反应对象的运动变化过程.Open GL 是通过双缓存技术来实现动画的.在双缓存模式下,位平面被分成前台位平面和后台位平面.只有前台位平面被显示,当完整的画面在后台视频缓存中画出以后,就调用SwapBuffers ()函数使其成为可见视频缓存.这样反复循环,视频图像以人眼察觉不到的时间间隔交替出现,从而实现画面的连续性.所以在绘制三维图形的DrawScene ()函数中应该包括实现前后缓存切换的函数SwapBuffers (wgl Get CurrentDC ()).1.4人机交互的实现该控件希望通过鼠标来控制盒子转动、停止,以实现人机交互,可以通过鼠标响应事件来实现.打开菜单中的建立类向导选择Automation 标签添加属性play ,其对应的变量名为m-play ,该属性用来记录鼠标的动作.在Do Prop Exchanged ()函数中对该属性进行初始化:PX-Bool (p PX ,“play ”,m-play ,t rue );接着要为Aa 控件添加play 事件和pause 事件,这部分工作可以利用建立类向导来完成.当执行play 事件时可以使停止的盒子转动,执行pause 事件时可以使盒子停止转动,在其对应的函数中进行编辑:64昆明理工大学学报(理工版) 第30卷void FirePlay () {Set Timer (1,45,N ULL ); m-play =false ; }void FirePause () {Kill Timer (1); m-play =t rue ; }利用类向导生成消息处理函数OnLButtonDown ()以响应鼠标左键的动作,编辑如下:void CAaCt rl ::OnLButtonDown (U IN T n Flags ,CPoint point ){ if (m-play ) FirePlay (); else FirePause (); COleCont rol ::OnLButtonDown (n Flags ,point );}当m_play 为真时调用FirePlay ()函数,触发play 事件,当m-play 为假时则调用FirePause ()函数,触发pause 事件.这样就基本完成了三维动画的设计,编译后可以利用Visual C ++中的ActiveX Control T est Container 对该控件进行检验,这时应该显示一个正在转动的盒子,如图2所示.2在Po w erpoint2000中的应用Powerpoint2000是office 软件中的一部分,主要用于制作演示文稿(即幻灯片).把基于Open GL 的控件应用到Powerpoint2000中可以增强其显示和交互功能.在Power 2point2000控件工具箱中点击其它控件并选中已经注册的Aa Cont rol ,在幻灯片中拖动鼠标确定控件的位置和大小,并设置其属性.要使控件处于激活状态,还必须利用office 套件共享的公用宏编程语言VBA(Visual Basic for Application )编写自定义控件的代码,其代码如下:Private Sub Aa1-ReadyStateChange ()Aa1.Visible =TrueEnd Sub在放映幻灯片时,ActiveX 控件将自动加载,这样就可以在幻灯片中显示三维动画,并可以通过鼠标直接在幻灯片中控制盒子的转动和停止,如图3所示.3结束语文章利用Visual C ++中的MFC 创建了一个基于Open G L 的三维动画ActiveX 控件,并把该ActiveX 控件应用到Powerpoint2000中,在幻灯片中实现了三维动画的显示和控制.基于Open G L 的ActiveX 控件具有易开发、移植性好、三维动画显示等特点,在课件制作、产品演示、游戏、网页中将会得到越来越广泛的应用.参考文献:[1]向世明.Open G L 编程与实例[M ].北京:电子工业出版社,1999.172~179.[2]叶琳.演示文稿结合V R 技术在设备展示中的应用[J ].机械工程师,2002,(1):60~63.[3]叶钦媚,黎绍发,梁宇涛.用MFC 实现基于OpenG L 的三维图形ActiveX 控件[J ].机电工程技术,2003,32(3):38~40.[4]三味创作室.Visual C ++6.0应用与提高[M ].北京:科学出版社,1999.392~446.74第1期 杨日容,杨承志,杨晓洪:基于Open G L 的ActiveX 控件的实现。
使用MFC开发ActiveX控件

使用MFC开发ActiveX控件MFC(Microsoft Foundation Classes)是一套用于开发Windows应用程序的C++类库,它提供了一组封装了Windows API的类和函数,可以方便地开发Windows桌面应用程序。
ActiveX(ocx)控件是一种可重用的组件,可以嵌入到其他应用程序中使用,可以在网页上嵌入,也可以在Visual Studio等开发环境中使用。
下面将介绍如何使用MFC开发ActiveX控件。
然后,根据自己的需求,在OnDraw函数中绘制控件的外观。
可以使用GDI+函数绘制各种形状、文字、图像等。
可以通过设置控件属性,比如颜色、大小、透明度等来改变控件的外观。
接下来,处理控件的消息和事件。
通过重写控件类的成员函数,比如OnLButtonDown、OnKeyDown等,可以处理鼠标和键盘的输入事件。
可以在函数中编写相应的逻辑代码,比如响应鼠标点击事件时弹出一个对话框。
在控件类中,可以添加成员变量和成员函数,用于保存控件的状态和实现控件的功能。
可以在控件的Load函数中初始化控件,可以在DoPropExchange函数中保存控件的属性,可以在Serialize函数中保存控件的状态。
最后,编译项目,生成ActiveX控件的.dll文件。
可以在同一解决方案的其他项目中引用这个控件,通过拖拽控件到窗口上的方式将其嵌入到应用程序中使用。
总结起来,使用MFC开发ActiveX控件主要有以下几个步骤:创建MFC应用程序项目,设计控件的外观,处理控件的消息和事件,实现控件的功能,编译项目,生成ActiveX控件的.dll文件。
通过这些步骤,可以方便地开发自己的ActiveX控件,并在其他应用程序中使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 . 3 . 1 M y M F C O p e n G L 控件的设计 主要功能是绘制一个在其表面可贴图 操作立方体图形, 外观形式表示为一个图 形标志, 省去属性的设置, 方法有绘制立方 体, 表面贴图, 显示坐标轴。事件有 OnLButtonDown;OnLButtonUp; O n M o u s e M o v e ; O n R B u t t o n D o w n 。并且通过 菜单选择的形式确定对图形进行操作。 3.3.2 MyMFCOpenGL 控件创建 ( 1 ) 控件工程项目和注册控件 选取 MFC ActiveX ControlWizard,取 项目名称为 M y M F C O p e n G L , 使用默认值 生成一个 M F C 控件项目, 在项目框架生成 的同时为控件提供了 UpdateRegistry()函数 注册控件。 (2)设置 OpenGL 绘图框架 Step1 在 MfcOpenGLWndCtl.h 中添加
if (COleControl::OnCreate (lpCreateStruct) == -1)
return -1; Init(); //OpenGL initialization return 0; } S t e p 5 添加一个 W i n d o w s 消息 WM_DESTROY void CMfcOpenGLWndCtrl:: OnDestroy() { COleControl::OnDestroy(); // TODO: Add your message
( 3 ) 用户界面特征: 具有用户界面, 容器 程序可以根据需要调整控件的位置和大小。
( 4 ) 状态永久性: 在执行生存期保持它 的状态能力。 3.2 ActiveX 控件的创建
使用 MFC 创建基于 OpenGL 的 ActiveX 控件时, 一般可分为三个阶段。( 1 ) 设计阶 段: 主要是用来确定控件的功能, 外观形式 及所提供的接口。( 2 ) 创建阶段: 包括创建控 件项目, 控件注册, 对各个属性的编程实现 等。(3)测试阶段:采用 Visual Studio 自带的 控件测试容器工具进行测试, 确保控件功 能的完整性。 3.3 实例验证
DrawScene( );
4 用 web 作容器,形成的交互式三维图形 Web 页
H T M L 文件由文本和各种标记组成, A c t i v e X 控件对于 IE 在 H T M L 中的标志是 < O B J E C T >, 该标记有几个重要的参数 特性
( 1 ) ID:控件提供一个标识名称,为 H T M L 代码提供一种访问该控件的方式
3 ActiveX控件的创建
3.1 ActiveX 控件 该控件是一种自动化对象, 即实现了
I D i s p a t c h 接口的 C O M 对象。一般具有如 下基本特征:
( 1 ) 属性和方法管理: 利用自动化技术 和属性变化通知实现属性和方法的管理。
( 2 ) 事件机制: 事件是控件在响应外部 作用时由控件触发的通知, 通常是用户进 行的键盘或鼠标操作, 控件利用事件与容 器进行通信, 使得容器程序能够及时感知 用户操作所引起的反应。
(UINT nFlags,CPoint point);响应鼠标操
作控制图形的平移, 旋转, 缩放。添加三个
方法 DrawAxis( );DrawGrid();ShowCoord
( );TextureMap( )分别表示显示相应的图形。
(4)持久性
在虚函数 DoPropExchange( )添加属性
变量的初始化值即可实现。 (5) 添加图形绘制程序。 在 OnDraw( )函数中实现图形的绘制,
{ ……. }; int pixelformat; if ( (pixelformat = ChoosePixelFormat (m_pDC->GetSafeHdc(), &pfd)) == 0 ) { MessageBox(_T ("ChoosePixelFormat failed")); return FALSE; } if (SetPixelFormat(m_pDC-> GetSafeHdc(), pixelformat, &pfd) == FALSE) { MessageBox(_T ("SetPixelFormat failed")); return FALSE; } return TRUE; } S t e p 4 添加一个 W i n d o w s 消息 WM_CREATE int CMfcOpenGLWndCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct) {
科技创新导报 Science and Technology Innovation Herald
31
科技创新导报 2008 NO.24 Science and Techd
handler code here
HGLRC
hrc;
hrc = ::wglGetCurrentContext();
( 4 ) P A R A M : 该标记用于设置控件的初 始属性值, 有两个特性: 属性名称和属性值
5 结语
本文在介绍 OpenGL 及 ActiveX 控件技 术的基础上, 总结了利用 M F C 开发基于 OpenGL 的 ActiveX 控件一般性的方法和步 骤, 通过实例进行了说明, 最后把实例中的 控件嵌入到 W e b 中, 实现了交互式控制三 维图形的 w e b 。
通过 MFC ClassWizard 中 Automation
选项卡可以很方便的给项目添加方法, 属
性和事件。填加事件 O n L B u t t o n D o w n
(UINT nFlags,CPoint point);OnLButtonUp
(UINT nFlags,CPoint point);OnMouseMove
#include<gl/gl.h> #include<gl/glu.h> #pragma comment(lib,"opengl32.lib") #pragma comment(lib,"glu32.lib") Step2 在接口实现类添加一个 OpenGL 的 RC(rendering context)成员变量:HGLRC hrc; Step3 添加一个设置 OpenGL 像素格式 ( 接口实现类的) 成员函数: BOOL CMfcOpenGLWndCtrl:: bSetupPixelFormat() { static PIXELFORMATDESCRIPTOR pfd=
图 1 基于 OpenGL 的图形绘制框架
数) 中使用 O p e n G L 函数绘制图形。 ( 6 ) 响应 W M _ D E S T R O Y 消息, 释放 R C
和DC。 在 V C 环境中, 基于 O p e n G L 的绘图框
架如图 1 所示, 一次典型的步骤包括场景 设置、模型构造、图形渲染。
::wglMakeCurrent(NULL,
NULL);
if (hrc)
::wglDeleteContext(hrc);
if (m_pDC)
delete m_pDC;
}
通过以上五步完成对 O p e n G L 绘图框
架的设置。
( 3 ) 创建方法, 属性, 事件
( 4 ) 响应 W M _ S I Z E , W M _ E R A S E B K G N D 消息,在 OnSize( )函数中建立视点、启动 投影变换并建立视景体, 之后重载 OnEraseBkgnd( )函数,使它返回真值,以消 除重绘画面所引起的闪烁。
(5)在 OnDraw( )函数(或 OnPaint( )函
技 术 创 新
科技创新导报 2008 NO.24
Science and Technology Innovation Herald
开发基于 OpenGL 的 ActiveX 控件的方法研究
丁红胜 ( 北方民族大学计算机科学与工程学院 银川 7 5 0 0 2 1 )
摘 要:针对开发基于 OpenGL 的 ActiveX 控件的问题,在介绍 OpenGL 程序设计流程及 ActiveX 控件技术的基础上,归纳了采用 MFC 开发 ActiveX 控件的一般性方法和步骤,并通过实例说明了该方法的使用,最后将该控件嵌入 Web 中,实现了交互式三维图形的 web。 关键词:MFC OpenGL ActiveX 控件 Web 中图分类号:TP391172 文献标识码:A 文章编号:1674-098X(2008)08(c)-0031-02
参考文献
[1] 王霞敏.tiveX技术的研究与应用[J].电脑 应用,2003(2).
[2] 乔林,费广正.penGL 程序设计[M].华大 学出版社,2000,4.
单独设置一个图函数 DrawScence()绘制图 形, 另外添加函数两个函数 w i n 2 o b j ( ) ; obj2win( );完成屏幕坐标到 OpenGL 坐标 的互相转换功能。在 O n d r a w ( ) 函数中通 过调用 DrawScene( )函数完成图形绘制。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 清除深度 缓冲区, 颜色缓冲区
1 引言
A c t i v e X 是用于网络的对象链接与嵌 入技术, 可以看成是实现了标准 O L E 接口 的 C O M 对象。此控件作为一个独立的对 象, 可以激起和响应事件, 处理消息, 并有 多线程能力, 支持容器之间的双向通信和 消息传递。它对外部环境是开放的, 能被 各种编程环境使用, 所以任何支持 A c t i v e X 控件的软件平台都可以使用此控件。 O p e n G L 是三维图形库, 提供几何建模、光 照和材质设置、纹理映射、交互等功能, 用 户可以方便地利用这个图形库创建具有真 实效果的三维模型。W E B 作为一种支持 A c t i v e X 的容器, 按照 C O M 规范的描述, 可 以方便地将其插入到 w e b 中, 实现交互式 三维图形的动态 w e b 显示效果。