Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14523424
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:04:22

下载本文示例代码
  在早期32-bit 版本的Windows中,用户控件是在ComCtl32中实现的,但是一些控件的显示功能是在User32.dll中实现的。例如在一个窗口中非客户区域(边框和菜单)的绘制就是由User32.dll来完成的。User32.dll 是操作系统的一个核心控件,它和操作系统是紧密联系在一起的。也就是说,不同版本的Windows中User32.dll 是不同。因此,应用程序在不同版本的Windows中运行的时候,由于User32.dll的不同,会导致应用程序的界面通常会有微小的不同。  在Windows 2000 和 Windows Me中, ComCtl32 和User32.dll是处于Windows的文件系统保护下的。因此它只能在系统升级或者是安装系统程序包的时候才能被改变。在Windows 2000 和 Windows Me以前的Windows版本中,ComCtl32 和User32.dll 实际上是和许多的应用程序或者系统程序包一起发布和安装的,可以被任何一个应用程序改变。由于无法保证每个应用程序或系统程序包都使用了正确的ComCtl32 和User32.dll,因此在安装了不同的应用程序和系统程序包后,常常导致系统中的ComCtl32 或User32.dll损坏或者是版本不符,从而使系统运行错误或导致应用程序运行错误。这个问题在Windows 2000 、Windows Me和所有的以前版本中都存在。  Windows XP 引入了全新的 Windows 组件模式,这种组件模式是基于组件并列共享(side-by-side sharing)。Windows XP容许不同版本的ComCtl32 和User32.dll 同时安装在系统中,不同的应用程序可以调用自己需要的版本,较好地解决了ComCtl32 和User32.dll对系统带来的潜在问题。  Windows XP对ComCtl32 和User32.dll的进步不仅在并列共享上,在Windows XP中,控件的外观是要受Windows XP的显示主题影响的。为了使应用程序在Windows XP改变显示主题的时候也改变自己的外观,Microsoft 在Windows XP中引入了主题管理功能。首先,在Windows XP中Microsoft将用户Win32 控件和公用控件的外观绘制功能全部集成在ComCtl32 version 6 中。其次,在Windows XP中,ComCtl32 version 6在绘制控件的外观的时候将依据系统的显示主题来进行。通过这两方面的结合,在Windows XP中,控件的外观显示就可以依据系统的显示主题进行改变了。  Windows XP的主题管理功能包含在uxtheme.dll中。 在Windows XP中,这个新的DLL 提供控件客户区域绘制时需要的信息,同时uxtheme.dll 还提供控件中非客户区域绘制时所需要的信息,例如一个窗口在绘制滚动条和标题条时需要的信息。这就意味着在每个程序中的每个控件都会和uxtheme.dll配合来完成控件的绘制工作。因此,在Windows XP种,由uxtheme.dll和ComCtl32一起配合工作,使应用程序可以根据Windows XP的不同的显示主题改变自己的外观。  从上面看到,由于ComCtl32 version 6具有这些新特色,它也给应用程序带来了一些风险。ComCtl32 version 6可能使原有的一些应用程序无法运行。为了防止这样的情况的出现,在Windows XP中以共享安装(side-by-side sharing)模式同时安装了ComCtl32 version 6 和ComCtl32 version 5。它们都安装在System32 目录下。  注意,在Windows XP中,并不是每个程序都使用ComCtl32 version 6。只有当应用程序在自己的程序清单中指明使用ComCtl32 version 6的时候,Windows XP才会让应用程序使用ComCtl32 version 6。假如一个应用程序没有提供程序清单,那么Windows XP就会为这个程序调用ComCtl32 version 5,这样可以保证原有程序的正确运行。  注意: ComCtl32 version 6 仅仅安装在Windows XP中,以前版本的Windows中并没有。在以前版本的Windows中,只可以使用ComCtl32 version 5。  为了使应用程序使用Windows XP中的全新用户界面并支持随着显示主题的改变而改变外观,我们必须在应用程序中使用ComCtl32 version 6,同时使用程序清单来指定调用ComCtl32 version 6。如果在你的应用程序中有自己绘制的控件,记着使用uxtheme.dll 来绘制它们,而不要自己直接去绘制它们。这样才能保证你自己绘制的控件和Windows XP完全融合在一起。   下面是一个具有主题感知能力的按钮代码,这段代码显示了如何利用ComCtl32 version 6来实现主题感知控件。 rtButton.top = 100;rtButton.left = 10;rtButton.bottom = 130;rtButton.right = 200;hTheme = OpenThemeData(hWnd, L"Button");DrawThemeBackground(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, &rtButton, NULL);DrawThemeText(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, wzTMB, wcslen(wzTMB),DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS | DT_SINGLELINE, 0, &rtButton);   在早期32-bit 版本的Windows中,用户控件是在ComCtl32中实现的,但是一些控件的显示功能是在User32.dll中实现的。例如在一个窗口中非客户区域(边框和菜单)的绘制就是由User32.dll来完成的。User32.dll 是操作系统的一个核心控件,它和操作系统是紧密联系在一起的。也就是说,不同版本的Windows中User32.dll 是不同。因此,应用程序在不同版本的Windows中运行的时候,由于User32.dll的不同,会导致应用程序的界面通常会有微小的不同。  在Windows 2000 和 Windows Me中, ComCtl32 和User32.dll是处于Windows的文件系统保护下的。因此它只能在系统升级或者是安装系统程序包的时候才能被改变。在Windows 2000 和 Windows Me以前的Windows版本中,ComCtl32 和User32.dll 实际上是和许多的应用程序或者系统程序包一起发布和安装的,可以被任何一个应用程序改变。由于无法保证每个应用程序或系统程序包都使用了正确的ComCtl32 和User32.dll,因此在安装了不同的应用程序和系统程序包后,常常导致系统中的ComCtl32 或User32.dll损坏或者是版本不符,从而使系统运行错误或导致应用程序运行错误。这个问题在Windows 2000 、Windows Me和所有的以前版本中都存在。  Windows XP 引入了全新的 Windows 组件模式,这种组件模式是基于组件并列共享(side-by-side sharing)。Windows XP容许不同版本的ComCtl32 和User32.dll 同时安装在系统中,不同的应用程序可以调用自己需要的版本,较好地解决了ComCtl32 和User32.dll对系统带来的潜在问题。  Windows XP对ComCtl32 和User32.dll的进步不仅在并列共享上,在Windows XP中,控件的外观是要受Windows XP的显示主题影响的。为了使应用程序在Windows XP改变显示主题的时候也改变自己的外观,Microsoft 在Windows XP中引入了主题管理功能。首先,在Windows XP中Microsoft将用户Win32 控件和公用控件的外观绘制功能全部集成在ComCtl32 version 6 中。其次,在Windows XP中,ComCtl32 version 6在绘制控件的外观的时候将依据系统的显示主题来进行。通过这两方面的结合,在Windows XP中,控件的外观显示就可以依据系统的显示主题进行改变了。  Windows XP的主题管理功能包含在uxtheme.dll中。 在Windows XP中,这个新的DLL 提供控件客户区域绘制时需要的信息,同时uxtheme.dll 还提供控件中非客户区域绘制时所需要的信息,例如一个窗口在绘制滚动条和标题条时需要的信息。这就意味着在每个程序中的每个控件都会和uxtheme.dll配合来完成控件的绘制工作。因此,在Windows XP种,由uxtheme.dll和ComCtl32一起配合工作,使应用程序可以根据Windows XP的不同的显示主题改变自己的外观。  从上面看到,由于ComCtl32 version 6具有这些新特色,它也给应用程序带来了一些风险。ComCtl32 version 6可能使原有的一些应用程序无法运行。为了防止这样的情况的出现,在Windows XP中以共享安装(side-by-side sharing)模式同时安装了ComCtl32 version 6 和ComCtl32 version 5。它们都安装在System32 目录下。  注意,在Windows XP中,并不是每个程序都使用ComCtl32 version 6。只有当应用程序在自己的程序清单中指明使用ComCtl32 version 6的时候,Windows XP才会让应用程序使用ComCtl32 version 6。假如一个应用程序没有提供程序清单,那么Windows XP就会为这个程序调用ComCtl32 version 5,这样可以保证原有程序的正确运行。  注意: ComCtl32 version 6 仅仅安装在Windows XP中,以前版本的Windows中并没有。在以前版本的Windows中,只可以使用ComCtl32 version 5。  为了使应用程序使用Windows XP中的全新用户界面并支持随着显示主题的改变而改变外观,我们必须在应用程序中使用ComCtl32 version 6,同时使用程序清单来指定调用ComCtl32 version 6。如果在你的应用程序中有自己绘制的控件,记着使用uxtheme.dll 来绘制它们,而不要自己直接去绘制它们。这样才能保证你自己绘制的控件和Windows XP完全融合在一起。   下面是一个具有主题感知能力的按钮代码,这段代码显示了如何利用ComCtl32 version 6来实现主题感知控件。 rtButton.top = 100;rtButton.left = 10;rtButton.bottom = 130;rtButton.right = 200;hTheme = OpenThemeData(hWnd, L"Button");DrawThemeBackground(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, &rtButton, NULL);DrawThemeText(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, wzTMB, wcslen(wzTMB),DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS | DT_SINGLELINE, 0, &rtButton); 下载本文示例代码


Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观Windows XP主题和控件外观
阅读(78) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~