把“风格”属性设置为“flat”就已经比较接近的了

解决方案 »

  1.   

    在应用文件所在目录下放入一个同名,扩展名为 .manifest 的文件,该文件为XML格式。XP的应用程序中有此资源,可提取。
      

  2.   

    ZYL原来做过一个
    你收索一下帖子
      

  3.   

    ldstudio() 说的是对的,但如果是vb6,必须在窗体引导前执行通用控件的初始化,在form的init事件中调用InitCommonControls
      

  4.   

    我按这个方法试了,不知道以下的XML文件内容是否正确,资料上说第五行的Executable Name要改成自己的程序名,但试了以后还是不行,哪位知道为什么?
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="X86" 
    name="Microsoft.Winweb.<Executable Name>" 
    type="win32" 
    /> 
    <description>.NET control deployment tool</description> 
    <dependency> 
    <dependentAssembly> 
    <assemblyIdentity 
    type="win32" 
    name="Microsoft.Windows.Common-Controls" 
    version="6.0.0.0" 
    processorArchitecture="X86" 
    publicKeyToken="6595b64144ccf1df" 
    language="*" 
    /> 
    </dependentAssembly> 
    </dependency> 
    </assembly>
      

  5.   

    不是的,不用像注册表里加值,所谓主题界面,就是用了common control 6.0版的通用控件,这在ms网站上游介绍的,不过ms只给出了vc的例子,因为vc只要把脚本加进去就行了,它的mfc框架作了其他工作。但vb里不是这样,这段脚本是没错,但不是直接加到资源中去,而是要用vb光盘上的rc.exe把资源编译好,然后用vb的资源编辑器打开,想加别的资源在此基础上添加。资源要如此编译:写个资源脚本比如叫xp.rc,内容如下:
    1 24 "xp.txt"
    把那段脚本写道这个xp.txt里,放到这个xp.rc相同的目录下,其实这段脚本的文件名叫什么都无所谓,只要xp.rc里的资源描述正确,编译时rc.exe能找到就行了。hhhh.mani...随你。
    资源加好了就行了,但是vb6的程序,如果不初始化通用控件库,启动时就有初始化错误,所以要调用initcommoncontrol,如果是高版本的我就不知道了,我没用过.net:>
      

  6.   

    我发现如果Executable Name含有中文字符就要出错,怎么办?
      

  7.   

    正确方法如下:
    在你的窗体中先加入入下代码:
    ====================================================================
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()Private Sub Form_Initialize()
        InitCommonControls
    End Sub
    ====================================================================
    记住:千万不要在Form_load()事件下写InitCommonControls这句话,这样你的窗体会启动不了.
    然后需要为你的程序建立一个和你的.exe同名的.exe.manifest文件(列如:如果你最后编译好的文件名为Example.exe,则建立一个文件名为Example.exe.manifest的文件)记住此文件必须存在于和你Exe文件的同一目录下.
    还是以Example.exe为例,则这个Example.exe.manifest的文件的内容如下:
    ====================================================================
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="X86"
        name="CompanyName.ProductName.YourApp"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    ====================================================================
    (哦,原来是XML啊)将以上内容保存为Example.exe.manifest好以后就OK了,在WinXP下运行你的程序就会得到XP风格的窗体和控件.
    Good Luck!!!
      

  8.   

    保存的时候存为UTF-8格式。
      

  9.   

    其实如果单独出来一个manifest文件的话是不需要改原来程序的。
      

  10.   

    把上面的那个xml文件存为youfilename.exe.mainfest
      

  11.   

    不用加资源了。
    实际上是这样的,程序会先找manifest文件,如果有这个文件,就按照这个文件的规则办事,如果没有这个文件就找资源,如果有资源就按照资源办事,如果连资源也没有,那就是普通界面了。
      

  12.   

    这我能想象的到,但是,第一,看样子不是initcommoncontrols调用单独起作用,因为如果不做这个调用,程序也在读这个文件,或是读资源,但是会无法启动,或报错,再者没有这个文件,仅仅是调用初始化函数,也没用,不会有新版控件的样子,比如mfc的对话框程序,如果不加这个类别为24的1号资源,它也就是老样子。如果:即调用了初始化函数,又有这个名字的文件,但文件内容为空,则报错说:文件所在的卷也被外部改变,因此打开的文件不再有效。
    那么,就是说windows下程序原本就在读这个文件,那么这个文件到底是干什么用的?还有别的脚本吗?有别的用途吗?好像在别处也没见有过什么介绍。这个资源又是怎么回事,为什么这么特殊呢?
      

  13.   

    不但字体不能改变,而且如果用了原来的一些控件相关的函数,比如drawedge,就会比较难看;当然,用鼠标晃晃就回来了。
      

  14.   

    我已经试验成功了,不管是加文件,还是加资源都可以,但是有个问题:VB中的Frame框架控件有点问题,如果在它的里面放一个Option控件,则会变黑,而且在里面的按钮也会非常难看,在Frame外面就没有问题,哪位知道为什么?
      

  15.   

    变黑的问题我也不知道,而且我用BCB也是这个问题,奇怪。
      

  16.   

    可能是这两个东西对通用控件库的封装的问题,bcb不知道,不过vb不是把frame做成了叫做容器控件地东西吗,可能这里面有代码影响了控件地绘制。试试能不能子类化frame控件来解决呢?
    vc6里面不会这样。
      

  17.   

    setwindowlong重定义窗口函数呀。vb6可以用接口的方法支持多态,但确实做不到继承,但这个子类化说的不是这个。这个xp效果的common control v6确实很怪异,vb里加进frame就是黑的,我想还是vb6的问题。
      

  18.   

    而且,设置ws_group也不行。不过,也不是没办法,不用frame做容器就的了,用picturebox就行,或者嫌它多余,占资源太多,自己做一个控件也行呀,不想自己画可以在自己的控件里包含一个frame控件,再把option加进去就没事了。
      

  19.   

    浪费代码。如果要得到这种效果建议你用XP控件写一个XP的界面,不就解决了。
    外接一般不大用的。
      

  20.   

    其实xp按钮的效果也就是几张图片而已嘛
    做出来的控件才几k
      

  21.   

    自己做个控件,把原有的frame镶进去可以解决,刚做过,不过确实有点浪费:>
    买了vs.net,查过新版MSDN了,两种方法确实都是正着,只是还没看到XML脚本到底是起个什么作用
      

  22.   

    manifest好像是叫做信息列表文件
    With Windows XP, the assembly is described by a manifest; the registry is no longer relied upon for storing and accessing the COM activation data. This allows components to now be isolated. Shared assemblies can also be serviced, so that applications can use the latest version. The table below illustrates the advances with Windows XP in this regard over Windows 2000. (For more information on side-by-side component sharing in Windows 2000, see Implementing Side-by-Side Component Sharing in Applications (Expanded)).
    (MSDN:ms-help://MS.VSCC/MS.MSDNVS.2052/dnwxp/html/sidexsidewinxp.htm)