⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc+̩

📁 一个Window XP的界面的编写库 可以根具需要自己扩展
💻
字号:
<html>

<head>
<title>VC无负担实现XP风格界面</title>

<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:宋体;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:"\@宋体";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	text-align:justify;
	text-justify:inter-ideograph;
	font-size:10.5pt;
	font-family:"Times New Roman";}
 /* Page Definitions */
 @page Section1
	{size:595.3pt 841.9pt;
	margin:1.0cm 1.0cm 1.0cm 1.0cm;
	layout-grid:15.6pt;}
div.Section1
	{page:Section1;}
-->
</style>

</head>

<body lang=ZH-CN style='text-justify-trim:punctuation'>

<div class=Section1 style='layout-grid:15.6pt'>

<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-family:宋体'>VC</span><span style='font-family:宋体'>无负担实现<span
lang=EN-US>XP</span>风格界面</span></p>

<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-family:宋体'>&nbsp;</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>关于让自己的程序界面实现<span
lang=EN-US>XP</span>风格这个问题,在网上的讨论很多,大多数的作法都是写一个<span lang=EN-US>.manifest</span>文件,然后将文件名改一下,比如<span
lang=EN-US>.exe</span>文件为<span lang=EN-US>test.exe</span>,就将这个<span lang=EN-US>.manifest</span>文件改名成<span
lang=EN-US>test.exe.manifest</span>,并将其和<span lang=EN-US>test.exe</span>放在同一个目录里,这样<span
lang=EN-US>test.exe</span>在<span lang=EN-US>XP</span>或<span lang=EN-US>2003</span>(必须启动<span
lang=EN-US>Themes</span>服务)下运行时就会呈现<span lang=EN-US>XP</span>界面风格。</span></p>

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

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>说了这么多,有点跑题了,呵呵。现在回到正题。我上面提到的方法很多网站上都有介绍,但是却有一个致命的缺点,就是必须有那个<span
lang=EN-US>.manifest</span>文件如影随形,<span lang=EN-US>exe</span>文件到哪,它就得到哪,这当然是我们不愿意看到的。有没有办法能把它“合”到<span
lang=EN-US>exe</span>文件中呢?答案是肯定的,这也正是本文题目中“无负担”三个字的意思。</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>当然了,那个<span
lang=EN-US>.manifest</span>文件还是要有的,只不过不是和<span lang=EN-US>.exe</span>文件放在同一目录中,而是把它放到资源文件中,编译后生成<span
lang=EN-US>.res</span>文件,<span lang=EN-US>link</span>后自然就和<span lang=EN-US>.exe</span>文件“合”到一起了。</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>首先,请出<span
lang=EN-US>.manifest</span>文件:</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US
style='font-family:宋体'>&nbsp;</span></p>

<div align=center>

<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
 style='background:#E6E6E6;border-collapse:collapse;border:none'>
 <tr>
  <td width=605 valign=top style='width:16.0cm;border:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;?xml
  version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;
  standalone=&quot;yes&quot;?&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;assembly
  xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot;
  manifestVersion=&quot;1.0&quot;&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;assemblyIdentity</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  name=&quot;XP style manifest&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  processorArchitecture=&quot;x86&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  version=&quot;1.0.0.0&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  type=&quot;win32&quot;/&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;dependency&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  &lt;dependentAssembly&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;
  &lt;assemblyIdentity</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  type=&quot;win32&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  name=&quot;Microsoft.Windows.Common-Controls&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  version=&quot;6.0.0.0&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  processorArchitecture=&quot;x86&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  publicKeyToken=&quot;6595b64144ccf1df&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  language=&quot;*&quot;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp;
  /&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;
  &lt;/dependentAssembly&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;/dependency&gt;</span></p>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&lt;/assembly&gt;</span></p>
  </td>
 </tr>
</table>

</div>

<p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>大家也看到了,这其实是一个<span
lang=EN-US>XML</span>文件,打开记事本,复制上面的内容,然后存盘,文件名任意,这里我存为<span lang=EN-US>XPStyle.manifest</span>。</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>然后在<span
lang=EN-US>VC</span>中新建一个<span lang=EN-US>MFC AppWizard</span>(<span
lang=EN-US>exe</span>)工程,<span lang=EN-US>Document/View</span>或<span
lang=EN-US>Dialog</span>均可,接着把<span lang=EN-US>XPStyle.manifest</span>复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(<span
lang=EN-US>.rc</span>),在文件最后加上一行:</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US
style='font-family:宋体'>&nbsp;</span></p>

<div align=center>

<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
 style='background:#E6E6E6;border-collapse:collapse;border:none'>
 <tr>
  <td width=605 valign=top style='width:16.0cm;border:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span lang=EN-US style='font-family:宋体'>1 24 </span><span
  style='font-family:宋体'>“<span lang=EN-US>XPStyle.manifest</span>”</span></p>
  </td>
 </tr>
</table>

</div>

<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US
style='font-family:宋体'>&nbsp;</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>在<span
lang=EN-US>VC</span>中编译并连接工程生成<span lang=EN-US>.exe</span>可执行文件,运行一下看看。</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>就这么简单?就这么简单。<span
lang=EN-US>&nbsp;&nbsp; :D</span></span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>这里我再多解释一下,最后加上的那一行,“<span
lang=EN-US>1</span>”代表资源<span lang=EN-US>ID</span>,必须是“<span lang=EN-US>1</span>”。“<span
lang=EN-US>24</span>”代表资源类型,我想我们对<span lang=EN-US>RT_ACCELERATOR</span>、<span
lang=EN-US>RT_BITMAP</span>、<span lang=EN-US>RT_MENU</span>、<span lang=EN-US>RT_STRING</span>等资源都非常熟悉,而“<span
lang=EN-US>24</span>”实际上是<span lang=EN-US>RT_MANIFEST</span>。最后面引号中的东西我就不再啰嗦了。</span></p>

<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体'>好了,编译后的这个<span
lang=EN-US>.exe</span>文件拿到哪都可以,都是<span lang=EN-US>XP</span>风格的界面,不用再依赖<span
lang=EN-US>.manifest</span>文件了。哦,当然了,必须在<span lang=EN-US>XP</span>或<span
lang=EN-US>2003</span>系统下才可以。</span></p>

<p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;</span></p>

<center><img width=632 height=500
src="VC无负担实现XP风格界面.files/image001.jpg"></center><span lang=EN-US style='font-family:
宋体'>&nbsp;</span>

<p class=MsoNormal><span lang=EN-US style='font-family:宋体'>&nbsp;&nbsp;&nbsp; </span><span
style='font-family:宋体'>效果不错吧?!<span lang=EN-US>&nbsp;&nbsp; :)</span></span></p>

<br>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*-------------------------------------------*</span></p>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*&nbsp; </span><span
style='font-size:13.5pt;font-family:宋体;color:red'>转载请通知作者并注明出处,<span lang=EN>CSDN</span>欢迎您!<span
lang=EN>&nbsp;&nbsp; *</span></span></p>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*&nbsp; </span><span
style='font-size:13.5pt;font-family:宋体;color:red'>作者:卢培培(<span lang=EN>goodname008</span>)<span
lang=EN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
*</span></span></p>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*&nbsp; </span><span
style='font-size:13.5pt;font-family:宋体;color:red'>邮箱:</span><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:blue'><a
href="mailto:goodname008@163.com">goodname008@163.com</a></span><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
*</span></p>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*&nbsp; </span><span
style='font-size:13.5pt;font-family:宋体;color:red'>专栏:</span><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:blue'><a
href="http://blog.csdn.net/goodname008">http://blog.csdn.net/goodname008</a></span><span
lang=EN style='font-size:13.5pt;font-family:宋体;color:red'>&nbsp;&nbsp; *</span></p>

<p class=MsoNormal align=left style='text-align:left'><span lang=EN
style='font-size:13.5pt;font-family:宋体;color:red'>*-------------------------------------------*</span></p>

</div>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -