★卢培培★ ── 欢迎光临卢培培(goodname008)的BLOG

人生真正的快乐,多在贫家茅舍,少在富室红楼。

用户操作
[即时聊天] [发私信] [加为好友]
卢培培ID:goodname008
79298次访问,排名1255好友0人,关注者0
goodname008的文章
原创 22 篇
翻译 0 篇
转载 5 篇
评论 286 篇
卢培培的公告


只有干不成事的人
没有干不成的事


代码下载说明:请将代码下载地址的链接复制到浏览器的地址栏,按下回车即可正常下载。

最近评论
jingang123gz:在C# 中怎么屏蔽WIN键啊?????
kennylyj:我在做类似的东西的时候遇到一个问题:
由于需要将一些16位的DOS程序的输出导出,因此使用了管道,但直接CreateProcess这些程序是不行的,必须通过ComSpec这个环境变量得到命令行程序的路径并把要运行的DOS程序的路径及相关参数作为命令行程序的参数才行,或者是先运行cmd/command,然后通过标准写端口写入要启动的程序的参数
而这样做却导致系统的虚拟机程序……
mycaibo:原来可以下载呀,我还自己写了一遍,不过说KBDLLHOOKSTRUCT没有定义,也不知道是为什么,谢谢哈
jarcyju:大哥下载不了呀,麻烦发一份给我,谢谢啦
zhuyc0808@gmail.com
wuzhongyi:我认为以上的方案不好,看样子你也是做开发的。先不考虑硬盘本身的分区特点及如何得到更快的访问速度,

现在如果c:\为系统盘,而也是你常用的。那样XP安装完以后要多大?2G左右吧,那么虚拟的内存又会占用1G多,你再装点软件什么的。VS2005+msdn即使你不装在C盘,照样撑死你。
文章分类
收藏
    相册
    其它图片
    文章用图
    A.我的软件
    1.注册表大师 v2.0
    2.窗口间谍
    3.图易贴 v1.1
    B.强烈推荐
    1.VB打造超酷个性化菜单[一]
    2.VB打造超酷个性化菜单[二]
    3.VB打造超酷个性化菜单[三]
    4.剖析VC++函数调用约定
    C.有脚印的地方
    CSDN--中国软件网
    微软中国社区
    微软中文新闻组
    D.开放源代码
    1.鼠标感应器
    2.VB自绘菜单类
    3.你想要钱吗?
    E.友情链接
    1. 凝尘
    2. 羽毛羽毛
    3. 泗水寻芳
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 VC无负担实现XP风格界面收藏

    新一篇: 利用底层键盘钩子屏蔽任意按键 | 旧一篇: 利用LineDDA函数做简单动画

    关于让自己的程序界面实现XP风格这个问题,在网上的讨论很多,大多数的作法都是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成test.exe.manifest,并将其和test.exe放在同一个目录里,这样test.exeXP2003(必须启动Themes服务)下运行时就会呈现XP界面风格。

    有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VCMFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现XP风格呢?原因是MFC替我们做了这件事。如果我们是让MFC注册的窗口类,它会调用_AfxInitCommonControls函数,而_AfxInitCommonControls的主要操作就是把comctl32.dll装载进来,然后判断.dll文件中有没有InitCommonControlsEx函数,如果有就调用,没有则调用InitCommonControls,到此真相大白。可能有人和我一样,看着以“afx”开头的窗口类名称很不舒服,于是喜欢自己注册窗口类,但在我们注册自己的窗口类时一定要确保调用过InitCommonControlsEx函数,这点一定要记得,如果忘记的话你将会看到一个空白的窗口。

    说了这么多,有点跑题了,呵呵。现在回到正题。我上面提到的方法很多网站上都有介绍,但是却有一个致命的缺点,就是必须有那个.manifest文件如影随形,exe文件到哪,它就得到哪,这当然是我们不愿意看到的。有没有办法能把它“合”到exe文件中呢?答案是肯定的,这也正是本文题目中“无负担”三个字的意思。

    当然了,那个.manifest文件还是要有的,只不过不是和.exe文件放在同一目录中,而是把它放到资源文件中,编译后生成.res文件,link后自然就和.exe文件“合”到一起了。

    首先,请出.manifest文件:

     

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity

      name="XP style manifest"

      processorArchitecture="x86"

      version="1.0.0.0"

      type="win32"/>

    <dependency>

      <dependentAssembly>

        <assemblyIdentity

          type="win32"

          name="Microsoft.Windows.Common-Controls"

          version="6.0.0.0"

          processorArchitecture="x86"

          publicKeyToken="6595b64144ccf1df"

          language="*"

        />

      </dependentAssembly>

    </dependency>

    </assembly>

     

    大家也看到了,这其实是一个XML文件,打开记事本,复制上面的内容,然后存盘,文件名任意,这里我存为XPStyle.manifest

    然后在VC中新建一个MFC AppWizardexe)工程,Document/ViewDialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:

     

    1 24 XPStyle.manifest

     

    VC中编译并连接工程生成.exe可执行文件,运行一下看看。

    就这么简单?就这么简单。   :D

    这里我再多解释一下,最后加上的那一行,“1”代表资源ID,必须是“1”。“24”代表资源类型,我想我们对RT_ACCELERATORRT_BITMAPRT_MENURT_STRING等资源都非常熟悉,而“24”实际上是RT_MANIFEST。最后面引号中的东西我就不再啰嗦了。

    好了,编译后的这个.exe文件拿到哪都可以,都是XP风格的界面,不用再依赖.manifest文件了。哦,当然了,必须在XP2003系统下才可以。

     

    XP风格界面演示

     

         效果不错吧?!   :)

         源代码下载:http://csdngoodname008.51.net/XPStyleVC.zip
     

    *-------------------------------------------*

    *  转载请通知作者并注明出处,CSDN欢迎您!   *

    *  作者:卢培培(goodname008              *

    *  邮箱:goodname008@163.com                *

    *  专栏:http://blog.csdn.net/goodname008   *

    *-------------------------------------------*

     

    发表于 @ 2004年08月20日 23:34:00|评论(loading...)|编辑

    新一篇: 利用底层键盘钩子屏蔽任意按键 | 旧一篇: 利用LineDDA函数做简单动画

    评论

    #jj 发表于2004-08-21 12:22:00  IP: 211.156.187.*
    我用向导创建了一个多文档mfc工程,然后在exe的目录放了一个xx.exe.manifest,为什么运行起来没有xp的风格出现,不是说不同调用InitCommonControlsEx吗?
    #goodname008(文章作者) 发表于2004-08-21 14:57:00  IP: 61.51.129.*
    首先,只有在XP或2003下才能实现XP风格,而且在2003下,必须开启 Themes 服务才可以。
    还有,你是怎么判断是否有XP风格的?
    新建一个多文档MFC工程,包含工具栏和状态栏,然后直接编译,一行代码都不写,再在exe的目录下放一个xx.exe.manifest文件,启动exe后仔细观察工具栏和状态栏
    总之,要确保操作系统使用的是外观风格是XP中的“蓝”、“银色”和“橄榄绿”其中的一种。
    我已经介绍了把manifest文件放到资源文件中的方法,楼上的为什么还要在exe目录中放xx.exe.manifest文件呢?
    #jie 发表于2004-11-04 20:51:00  IP: 218.91.163.*
    vb如何实现呢?老兄能否指导指导。
    #jie 发表于2004-11-05 13:58:00  IP: 218.91.175.*
    我搞了一个上午,vb编译后是没有资源文件的,或者还是通过其他方法弄出来,我后来又试了vbnet,但是也没有。
    我从其他网站下载了一个你上传的XpStyles.res文件,这个文件又是如何用的呢?
    #jie 发表于2004-11-05 14:19:00  IP: 218.91.175.*
    能不能把你的例子代码发给我?谢谢了。
    nt_jie@hotmail.com
    #goodname008(文章作者)  发表于2004-11-05 08:54:00  IP: 202.204.224.*
    原理一样的,都是加个资源,再调用函数。
    #goodname008(文章作者)  发表于2004-11-05 15:29:00  IP: 221.216.11.*
    给jie发邮件了,附件是例程,必须编译后执行才有效果。
    #111 发表于2004-11-12 11:37:00  IP: 218.70.67.*
    能不能上传一个例子
    #21bird 发表于2005-03-02 10:49:00  IP: 218.11.223.*
    呵呵,好像装了sp6补丁的vc6就不用这么麻烦了,系统会自动帮你做这些:)

    我说怎么我的程序不放那个文件也可以是xp风格呢……
    #worm 发表于2005-06-18 19:08:00  IP: 61.186.252.*
    这个方法我早就在用了,但是今天突然发现一个问题,就是一旦使用了这种方法以后,MessageBox就弹不出来了,必须先打开一下某个对话框之类的东西,才可能弹出。实在不知道是为什么,你试试看是不是也一样,谢谢。
    #bird 发表于2005-07-29 18:14:00  IP: 61.186.252.*
    我现在在做一个IE插件(DLL),我用你的方法试了一下,不起作用,实现不了XP界面
     
    但做EXE应用程序可以实现

    有什么解决的办法吗
    #妖刀 发表于2005-08-09 10:35:00  IP: 61.186.252.*
    我现在在做一个IE插件(DLL),我用你的方法试了一下,不起作用,实现不了XP界面
     
    但做EXE应用程序可以实现

    有什么解决的办法吗




    遇到同样问题,dll不起作用,exe可以,不知道bird 大侠解决了没有,如果解决了,请分享一下,非常感谢,yaodaocome@sohu.com
    #may 发表于2005-11-08 21:02:00  IP: 219.150.144.*
    你写的代码对我很有帮助,但是我为什么下不了呢?
    #xt8607 发表于2006-02-14 20:10:00  IP: 210.51.217.*
    卢老师:
    你好. 俺到处找这资料,俺用VB, 是笨笨, 可否将代码发给俺.俺的信箱是xt8607@sina.com

    晓田


    #blacko 发表于2006-02-15 22:18:00  IP: 60.166.24.*
    21bird 发表于2005-03-02 10:49 AM IP: 218.11.223.*
    呵呵,好像装了sp6补丁的vc6就不用这么麻烦了,系统会自动帮你做这些:)

    我说怎么我的程序不放那个文件也可以是xp风格呢……




    为啥我的vc6更新到sp6没这功能……
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 卢培培