vc中实现xp风格界面

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
关于让自己的程序界面实现XP风格这个问题,在网上的讨论很多,大多数的作法都是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成test.exe.manifest,并将其和test.exe放在同一个目录里,这样test.exe在XP或2003(必须启动Themes服务)下运行时就会呈现XP界面风格。

  有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VC(MFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现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 AppWizard(exe)工程,Document/View或Dialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:  

  1 24 “XPStyle.manifest” 

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

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

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

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


我试了一下,方法是可行的,主要是要注意  1 24 “XPStyle.manifest”  放的地方,不然编译器会提示你找不到该文件

我是这么放的

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED

1 24 “XPStyle.manifest”  放这里!
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h/0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#include ""afxres.h""/r/n"
    "/0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES/r/n"
    "#define _AFX_NO_OLE_RESOURCES/r/n"
    "#define _AFX_NO_TRACKER_RESOURCES/r/n"
    "#define _AFX_NO_PROPERTY_RESOURCES/r/n"
    "/r/n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)/r/n"
    "#ifdef _WIN32/r/n"
    "LANGUAGE 9, 1/r/n"
    "#pragma code_page(1252)/r/n"
    "#endif //_WIN32/r/n"
    "#include ""res//TISDemo.rc2""  // non-Microsoft Visual C++ edited resources/r/n"
    "#include ""afxres.rc""         // Standard components/r/n"
    "#endif/r/n"
    "/0"
END

#endif    // APSTUDIO_INVOKED

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

相关推荐

WIN32API 函数及常量文件

例如: ' Predefined Resource Types Const RT_CURSOR = 1& Const RT_BITMAP = 2& Const RT_ICON = 3& Const RT_MENU = 4& Const RT_DIALOG = 5& Const RT_STRING = 6& Const RT_FONTDIR = 7& Const RT_FONT = 8& Const RT_ACCELERATOR = 9& Const RT_RCDATA = 10& Declare Function InitAtomTable Lib "kernel32" Alias "InitAtomTable" (ByVal nSize As Long) As Long Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer Declare Function GlobalDeleteAtom Lib "kernel32" Alias "GlobalDeleteAtom" (ByVal nAtom As Integer) As Integer Declare Function GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomA" (ByVal lpString As String) As Integer Declare Function GlobalGetAtomName Lib "kernel32" Alias "GlobalGetAtomNameA" (ByVal nAtom As Integer, ByVal lpBuffer As String, ByVal nSize As Long) As Long

WINDOWSXP主题风格美化教程

桌面主题     一个XP的桌面主题可以包含好几个部分 风格、壁纸、屏保、鼠标指针、系统声音事件、图标     除了风格是必须的之外 其他部分都是可选的 风格可以定义的内容是大家在Windows里所能看到的一切     例如窗口的外观、字体、颜色 按钮的外观等等等等 一个桌面主题里风格就决定了大家所看到的Windows的样子     大家可以打开 X:/Windows/Resources/Them

Comman1999 7464

[学习]VC实现xp风格

 要在你的应用程序中实现XP风格,你要做的第一件事情是创建一个manifest文件(其实是一个XML文件),下面列出了代码,新建一个文本文件,然后保存为xpstyle.manifest。这里我们放在res文件夹中,也可以放在编译目录下。我们要做的就是把它整合到资源文件中,这样编译后生成.res文件,link后自然就和.exe文件合到一起了。首先,复制下面.manifest文件:  name

cciey的专栏 2094

InitCommonControls

InitCommonControls void WINAPI InitCommonControls(void); #if (_WIN32_IE >= 0x0300) BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX); #endif InitCommonControls和InitCommonCont

hgl0702的专栏 797

VC实现XP样式界面

看了《VC无负担实现XP风格界面》一文,整理如下:在VC6中实现XP样式的界面,方法如下:编写配置文件XPStyle.manifest,将其放至VC工程目录下:XPStyle.manifest内容:xml version="1.0" encoding="UTF-8" standalone="yes"?>assembly xmlns="urn:schemas-microsoft-com:asm.v1

天堂露珠 的专栏 3423

AfxEnableControlContainer 函数的使用与意义

AfxEnableControlContainer()函数是允许应用程序作为控件容器来使用,对于用MFC向导自动生成的单文档框架程序的C...APP::InitInstance()函数中自动加了这一句 AfxEnableControlContainer(); AfxEnableControlContainer() 负责布线所需的 CWnd 对象,以包含 OLE 控件支持结构。如果选择 O

heary29的专栏 1万+

VC6无负担实现XP风格界面

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

浩然也空 的专栏 760

VC无负担实现XP风格界面(转)

   VC无负担实现XP风格界面function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://w

xilyu的专栏 2100

[转]VC无负担实现XP风格界面

VC无负担实现XP风格界面 有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VCMFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现XP风格呢?原因是MFC替我们做了这...

weixin_30702413的博客 103

VC无负担实现XP风格界面 [转]

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

敟當柒秒哋魚 654
上一篇: WindowsXP桌面图标透明的恢复
下一篇: 白乔原创:VC之美化界面篇
JackFromVIA
博客等级 码龄20年 1粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值