欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOCX文档下载
 

VC6编程,让程序有系统皮肤

  • 资源ID:131524577       资源大小:13.92KB        全文页数:2页
  • 资源格式: DOCX        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

VC6编程,让程序有系统皮肤

Windows卜的动态链接库可能存在多个版本,比如系统提供的基本控件所在的Comctl32.dll就包括版本6.0和之前的版本。在新版本Z前编写的程序能否保证绝对和新版本的动态链接库兼容呢?只能说,一般情况下可以,但是不能绝对保证。Windows提供了解决办法,那就是设定程序执行的ActiveContext。对于客户自己编写的动态链接库,同样也存在这样的问题。这里说的是动态链接库,如果考虑动态链接库的其他应用,就涉及到更广阔的应用范围了,可能是普通的动态链接库,可能是COM服务器等,这些都是可以通过配置程序执行环境来改变具体使用哪个动态链接库。配置程序执行上下文,实际就是配置程序执行的组件配置,这里的组件只要是指动态链接库。对组件进行配置,简单来说,就是配置程序使用什么动态链接库。这种配置具体是怎么实现的呢?其实就是在Windows程序真正启动Z前增加了一层处理。这层处理就是把程序执行所需要的环境先建立好,直接点说就是把需要的动态链接库准备好。上面说到,配置组件就是在程序真正执行之前准备好需要的动态链接库,这项工作可以由Windows系统的ModuleLoader或者应用程序自己完成。具体的实现方式有三种:1文件级的配置:在应用程序所在的目录下创建一个.exe.man辻est文件,这个文件中说明组件配置的具体信息,具体的信息格式可以查询MSDNo在VS2003及以上的版本,新建工程时,会自动生成一个manifest文件在res目录下。2.资源级的配置:创建资源,类型:RT_MAXIFEST(值为24),ID:CREATEPROCESS_MAXIFEST_RESOURCE值D为1),内容为上面的manifest文件的内容。ModuleLoader在加载EXE之后,执行程序之前,会检测到程序的资源表中是否有类型为24,ID为1的资源,如果有这项配置信息,就会按照配置信息屮的配置,加载对应的动态链接库了。3资源和代码混合的配置:首先也需要添加资源,资源类型RTJIANIFEST值为24),ID为ISOLATIOXAWARE_MANIFEST_RESOURCE_2),内容也为上述符合格式的manifest文件;然后再在include之前增加一句ffdefineISOLATIOX_AWARE_ENABLED°1这样编译器在编译时,会把一些API重定向到另夕|、一个API,这个API先进行当成程序ActiveContext的检测,如果程序执行Context没有配置成资源文件所描述,会调用相应的API配置好Context,然后再从目的API所在的动态链接库中获得函数地址(GetProcAddress)后,通过函数指针调用目标API,最后执行完毕后恢复执行环境。这可以保证在系统ModuleLoader没有程序ActiveContext支持时,配曽好程序执行环境。但是采用这种方法时需要注意,这是一种代码级的支持,所以对MFC/ATL并不支持,因为MFC/ATL库编译时,并不是在ISOLATION_AWARE_ENABLE已经定义的情况下编译的。4.代码级的配置:除了以上几种方法之外,你还可以通过调用相应的API,自己通过代码来控制当前的执行环境,还可以做到一段代码调用这个版本动态链接库屮的代码,另外一段代码调用另外一个版本的动态链接库代码。程序执行Context是线程有效的。这可能在什么情况下有应用呢?比如说,你要开发某个应用程序的插件,你的插件依赖与系统提供的某个版本的动态链接库,但是应用程序在不断的升级,不能保证应用程序的执行环境始终与最初发布版本一致。这时你就可以自己通过代码来限定执行环境了。需要注意的是,如果程序已经采用了第三种方式进行执行环境的管理了,你就不能使用代码级的环境管理了。前面说的都是程序执行Context,实际准确的说应该是模块执行Contexto对于动态链接库,同样可以进行类似的配置。这些配置都有相应的API及manifest文件格式,详见MSDNo面说了这么多,下面我们来做几个简单的试验吧。1.使用VS2003,新建一个MFC对话框程序,随便拖几个控件进去,编译。到Debug目录下运行,你会发现界面并不是XP风格的。在Res目录下,你会发现一个manifest文件,这个manifest文件是VC自动生成的,里面包含使用XP风格控件动态链接库的信息。把这个动态链接库拷贝到DebugB录下,并重命名为.exe.manifest,再运行程序,程序界面是否是XP风格了?这是第一种方式的实现。新建一个Win32工程,在about对话框中随便添加几个控件,编译运行,对话框中的控件不是XP风格的。添加ID为1的RT_MANIFEST类型资源,内容为例1屮的maMfest文件内容,再编译运行,可以看见对话框中控件为XP风格。这是第二种方式的实现。2. 把上述工程屮的RT_MANIFEST资源ID修改为2,然后在stdafx.h中#elude之前增加ffdefineISOLATION_AWARE_ENABLED,1编译运行,对话框控件也是XP风格的。这是第三种方式的实现。3. 在上述最原始Win32工程中,把WinMain函数修改如下:ACTCTXaetetx;HANDLEhAetCtx=INVALID_HANDLE_VALUE;staticeonstTCHARszManifest=TEXT(z,Win32.manifest);UL0NG_PTRulpAetivationCookie;DWORDdwLastError;/Setuptheaetivationeontextstructurememset(&aetetx,0,sizeof(aetetx);aetetx.ebSize二sizeof(aetetx);setetx1pSouree=szManifest;/Createtheaetivationeontext,thendeletethestring-wedorf'tneedit/anymorehAetCtx=CreateAetCtx(&aetetx);dwLastError二GetLastError();/Didwefailereatingtheaetivationeontext?辻(hAetCtx二=INVALID_HANDLE_VALUE).SetLastError(dwLastError);/operatordeleteJmayhaveeleareditreturn0;/Aetivatetheeontextandmakeuseofitif(AetivateAetCtx(hAetCtx,&uIpAetivationCookie)Z前WinMian函数的代码/UseSearchPathtofindDLLsmentionedintheapplication''smanifest,/useCOMtofindisolatedcomponents,oruseCreateWindowtofindisolated/windowclassesif(!DeactivateAetCtx(0,ulpAetivationCookie)return0;同时保证EXE所在目录下有/n32.manifest文件,内容ReleaseActCtx(hActCtx);保证增加以上代码后可以编译通过,为之前的XP主题配置信息。运行程序,会看见控件为XP主题,注释掉ActivateActCtx,控件不再是XP主题。以上的例子主要是如何实现XP主题,但是程序执行环境的配置不仅仅实现XP主题,还有很多更广阔的应用。

注意事项

本文(VC6编程,让程序有系统皮肤)为本站会员(无***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!