Windows清除激活标志的方法

大家在购买电脑或笔记本的时候,有的商家给出的7天无理由退货,并不是真正的无理由,往往附件条件windows是不能激活的,如果激活了就只能换不能退了。

卖家提出的条件也特别滑稽可笑,你想不联网怎么体验啊?不联网怎么知道网卡有没有问题?但是,如果你联网了,windows就自动激活了,这岂不是自相矛盾!

所以,买家就不自主的进入了卖家的圈套,也就是你只能换不能退,这样最终你必须买一台商家的产品。你想商家是怎么处理换回去的商品,把激活水印去掉的?肯定有办法!经过研究发现,可用如下方法去掉激活水印:

一、新建记事本文件clear.txt并编辑输入如下内容:

@echo off
slmgr.vbs
exit

二、保存clear.txt文件

将记事本文件clear.txt,名字修改为clear.bat,并将其另存为ANSI格式

三、用管理员身份运行clear.bat

选中clear.bat文件右键管理员权限运行,再开机就会显示windows未激活,注意不要联网查看!在“我的电脑”右键“属性”里面“更改产品密钥或升级windows”里面的前面部分查看。如果显示未激活,如果体验没有超过7天,发现产品体验不好,就可以无理由退回了!强调如上过程不能联网!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
新功能 • 在每个站点选项都添加了“连接后激活同步浏览” • 添加了 -approvessl 命令行参数,用于自动允许接受 SSL 证书。请谨慎使用 • 添加了 MLSD 支持 (机器格式目录列表) • 添加了 自动/ANSI/UTF8 (iso-8859-1/Latin-1) 编码支持 • 添加了当把服务器地址粘贴到代理对话框的主机字段时,对“主机:端口”的解析 • 添加了从本地浏览器拖放文件到外部应用程序的功能 • 右键菜单添加了自定义命令 (在 FTP 文件搜索对话框) • 添加了 "队列选定的上一层" 到 FTP 搜索右键弹出菜单 • 右键菜单添加了“移动到”(在 FTP 文件搜索对话框) • 在 FTP 搜索对话框的数据选项卡添加了新选项 "仅搜索文件夹内与数据范围匹配的数据" • 改变了关于对话框,增加了明细资料的显示 • 在 Windows XP 下, FlashFXP 现在以逻辑排序的方式对文件进行 alpha 排序列表, 这种行为将与你的操作系统相匹配 • 在任务栏双击 SSL 锁定图标现在将显示 SSL 证书对话框 改变 • 改进了脱机浏览模式 • 改进了用户/密码 FTP 站点提示 • 改进了同步浏览支持 • 升级了 Zlib 组件为最新版本 • 升级了文件夹浏览对话框 (使用 BIF_USENEWUI 标志), 给对话框增加一个可调大小的文件夹按钮 • 优化了状态窗口文本滚动 • 优化了 FlashFXP 加载时间。大约加快了 30% • 优化了过滤对话框加载/保存时 way 选项 (例如: skiplist) • 优化了当启用速度限制时的 CPU 占用率 • 优化了 FTP 缓冲系统, 改进了缓存的总体性能 • FlashFXP 现在使用 FastMM4 内存管理 • 优化了本地文件浏览器列表速度。大约比加快了 237% • 一旦到达连接重试限制, 该站点所有文件将被标记为已失败或已删除 (基于你的设置), 然后继续连接队列中的下一个站点 • 改进了查找功能 • ftp:// url 用户/密码字段 url 现在以 RFC 1738 编码 • 升级 OpenSSL Dll 为 0.9.8g • 消息框、消息输入现在居中于 FlashFXP 窗口而不是整个屏幕 • 添加了注册名称的 UTF8 编码显示处理 • 升级了 XP 方案组件为最新版本。该升级改进了对方案的支持 • 改进了从 Adobe Reader 或其它程序中复制 ftp:// 类型的 URL 时对剪贴板的监视处理 • 改进了当处理服务器脱机错误消息时的 PRET 支持 (drftpd) 修正 • 某种情况下, 用户初次断开与站点的连接会触发自动重新连接 • FlashFXP 从缓存载入文件夹时允许切换远端文件夹, 并产生一个错误 • 文件列表改变了字体大小, 导致本地浏览器下拉控件清除了它的内容 • 如果当前工作目录不是源始目录, 从列表视图拖拽并移动对象到树状视图时会失败 • 登录时关闭 FlashFXP 常常导致崩溃 • 更改自定义命令快捷键不能设置修改标志, 并且更改无法保存 • 查看或编辑一个文件时, 状态栏队列剩余数显示不正确 • 重命名文件夹时, 它的子文件夹缓存没有清除 • 在某种情况下, 由于一个错误而导致列表命令失败, 但 FlashFXP 仍然认为它是成功的 • 在某种情况下, 当传送排队项目时, 由于缓存粘性的问题导致不良结果 • 解决了当拨出便携式 USB 驱动器时, FlashFXP 会出现评估版对话框的问题 • 在 U3 manifest 中添加了 hostCleanUp, 解决了 U3 Lauchpad 较早版本中的一个错误 • "跟踪深层动态链接" 与 "传送期间更新目录缓存" 的内部值弄反了 • Vista 兼容问题,即:当进行拖动操作时,投放目标没有适当更新 • Vista 兼容问题,即:当鼠标在任务栏按钮盘旋时,缩略图显示为图标而不是程序窗口 • Vista 兼容问题,即:当按下 ALT 键导致活动窗口中的对象 (比如按钮) 消失 • Vista 兼容问题,即:设置的 FTP 服务器时区没有适当保存 • Vista 兼容问题,即:在 Windows Vista 下帮助文件不能打开 • Vista 兼容问题,即:显示方面的问题 • 解决了 FlashFXP PWD 命令远程缓冲溢出的问题 • 修正了静默安装选项。-s 现在在安装时使用所有的默认值 • 修正了站点管理器时区排序问题 • 其它次要修正 特别声明 FlashFXP 的所有中文版本均是破解版,所有破解均从网上收集而来。 特此感谢下列破解者: dR [主破解], Sxx [队列问题], LOVE [自动注册对话框] 等等,没有他/她们的贡献,没有这个破解版的推出。对上述人士表示敬意。之前考虑到一些原因,未列出他/她们的姓名 (如版权法)。 由于官方中文版的汉化并不完善,还有很多的遗漏,因此有了这个中文版。自 2.x 版本起,所有中文翻译和汉化,均是我的原创,少部分术语用词参考官方中文。
DISKGEN命令详解 现在可供选用的硬盘分区工具软件很多,但基本上都是“外国货”,只有被誉为分区小超人的DISKMAN是地地道道的国货。DISKMAN以其操作直观简便的特点为菜鸟级电脑用户所喜爱,但在近两年的时间里,DISKMAN的版本一直停留在V1.2,总不见作者推出升级版本,不免让人为它担心。现在,2.0版本的DISKMAN终于出现了,仍然是免费软件,只是名子改成了Disk Genius。经过近两年的潜心“修炼”,Disk Genius的“功力”确实不可当日而语,它不仅提供了基本的硬盘分区功能(如建立、激活、删除、隐藏分区),还具有强大的分区维护功能(如分区表备份和恢复、分区参数修改、硬盘主引导记录修复、重建分区表等);此外,它还具有分区格式化、分区无损调整、硬盘表面扫描、扇区拷贝、彻底清除扇区数据等实用功能。虽然Disk Genius功能更强大了,但它的身材依然“苗条”,只有区区143KB。 一、Disk Genius的主要功能及特点 1、仿WINDOWS纯中文图形界面,无须任何汉字系统支持,以图表的形式揭示了分区表的详细结构,支持鼠标操作; 2、提供比fdisk更灵活的分区操作,支持分区参数编辑; 3、提供强大的分区表重建功能,迅速修复损坏了的分区表; 4、支持FAT/FAT32分区的快速格式化; 5、在不破坏数据的情况下直接调整FAT/FAT32分区的大小; 6、自动重建被破坏的硬盘主引导记录; 7、为防止误操作,对于简单的分区操作,在存盘之前仅更改内存缓冲区,不影响硬盘分区表; 8、能查看硬盘任意扇区,并可保存到文件。 9、可隐藏FAT/FAT32及NTFS分区。 10、可备份包括逻辑分区表及各分区引导记录在内的所有硬盘分区信息。 11、提供扫描硬盘坏区功能,报告损坏的柱面。 12、具备扇区拷贝功能。 13、可以彻底清除分区数据。 二、Disk Genius运行界面 如果你只是想利用Disk Genius查看、备份硬盘分区信息,可以在直接在WINDOWS 9x下运行本软件。但如果涉及更改分区参数的写盘操作,则必须在纯DOS环境下运行,而且在使用前应将“BIOS设置”中的“Anti Virus”选项设为“Disable”。 运行“DiskGen.exe”启动本软件后,将自动读取硬盘的分区信息,并在屏幕上以图表的形式显示硬盘分区情况。图1是Disk Genius检测笔者硬盘得到的分区信息结构图。左侧的柱状图显示硬盘上各分区的位置及大小,最底部的分区为第一个分区。通过柱状图各部分的颜色和是否带网格,可以判断分区的类型,灰颜色的部分为自由空间(不属任何分区),不带网格的分区为主分区,带网格的为扩展分区,扩展分区又进一步划分成逻辑分区(逻辑盘D、E、F…)。屏幕右侧用表格的形式显示了各分区的类型及其具体参数,包括分区的引导标志、系统标志,分区起始和终止柱面号、扇区号、磁头号。如果你对这些参数的意义不太懂,可以参阅帮助文件中“关于分区表”的内容。 在柱状图与参数表格之间,有一个动态连线指示了它们之间的对应关系。你可以通过鼠标在柱状图或表格中点击来选择一个分区,也可以用键盘上的光标移动键来选择当前分区。用“TAB”或“SHIFT-TAB”键可在柱状图和表格之间选择。当你选择了一个FAT或FAT32分区后,表格下部的窗口中将会显示关于这个分区的一些信息:分区的总扇区数、总簇数和簇的大小,两份FAT表、根目录、数据区的开始柱面号、磁头号、扇区号。 特别提示:分区参数表格的第0~3项分别对应硬盘主分区表的四个表项,而第4、5、6…项分别对应逻辑盘D、E、F…。当硬盘只有一个DOS主分区和扩展分区时(利用FDISK进行分区的硬盘一般都是这样的),“第0项”表示主分区(逻辑盘C)的分区信息,“第1项”表示扩展分区的信息,“第2、第3项”则全部为零,不对应任何分区,所以无法选中。笔者曾在某网站论坛上发现一张有关DISKMAN疑问的帖子,询问有没有办法将分区参数表格中全部为零的“第2项、第3项”删除掉, 这当然是不可能的,发帖者显然对硬盘分区知识缺乏了解。想真正弄懂分区参数表格中各项的意义,必须了解硬盘分区表链结构,建议有兴趣的朋友多找一些相关资料看看。 三、使用说明 1. 备份及恢复分区表: 启动本软件后,按F9键,或选择“工具”菜单下的“备份分区表”项,在弹出的对话框中输入文件名(默认保存在A盘上),即可备份当前分区表。按F10键,或选择“工具”菜单下的“恢复分区表”项,然后输入文件名(默认从A盘读取),本软件将读入指定的分区表备份文件,并更新屏幕显示,在你确认无误后,可将备份的分区表恢复到硬盘。 2. 建立分区: 未建立分区的硬盘空间(即自由空间)在分区结构图中显示为灰色,只有在硬盘的自由空间才能新建分区。 要建立主分区(Primary),先选中分区结构图中的灰色区域,按ENTER键;然后按提示输入分区大小,选择分区类型(要建立非DOS分区,还须根据提示设定系统标志,如建立Linux分区,系统标志为“83”)。利用本软件,你最多可以建立四个DOS主分区。存盘前如用户未设置启动分区,则自动激活第一个主分区。 要建立扩展分区,先选中分区结构图中的灰色区域,按F5键,在弹出的提示框中输入分区大小后确认。扩展分区建立后,还要将其进一步划分为多个逻辑分区(逻辑盘)才能使用,方法是:选中新建立的扩展分区(绿色区域)后,按ENTER键,其后的操作与建立主分区时相同。 提示:当硬盘上已有一个扩展分区时,就不能再建扩展分区了。如果你想将某个与扩展分区相邻的自由空间再划成扩展分区(即扩大“扩展分区”的范围),只能采取先删除已有的扩展分区,然后再重建才行。 3. 激活分区、删除分区、隐藏分区: 选中要激活的主分区,按F7键即可将其设定为活动分区,活动分区的系统名称将以红色显示。 选中某一分区,按F4键即可隐藏该分区,再次按F4键恢复;按Delete键或F6键即可删除选定分区。 提示:如删除主分区,其所在空间转化为自由空间(变成灰色区域);如删除某一个逻辑分区(如D、E…盘)后,其所在空间并不变成自由空间,而是转化为未使用的扩展分区(变成绿色区域 4.调整分区大小 本软件能在不损坏任何数据的情况下,直接调整FAT16或FAT32分区的大小。方法是:选择要调整的分区,在“分区”菜单下选择“调整分区大小”命令,然后按提示操作。建议在调整前运行WINDOWS系统的“磁盘扫描程序”检查硬盘错误并纠正,并做好重要文件的备份。不可以在调整过程中强行中断或关机(重新启动)。否则,被调整分区上的数据将会全部丢失。 不过,笔者发现,Disk Genius的分区调整操作实际上只是将分区的终止柱面数、磁头数、扇区数在可能的范围内(即没有数据的区域)作调整,并不能真正挪动分区的起始位置。所以此项功能似乎用处并不大。 5. 修改分区参数: 选中要修改的分区,按F11键进入修改状态(如图2),将光标移动到要修改的参数,键入你要设定的值。修改完毕后选“确定”退出。 提示:用此法可调整分区的起始和终止柱面号、磁头号、扇区号,从而调整分区大小,但可能会造成逻辑盘(数据)丢失,不熟悉分区参数含义的用户要慎用此功能。 6. 重建分区表: 当硬盘分区表被病毒或其他原因破坏时,Disk Genius通过未被破坏的分区引导记录信息(主要是搜索分区表结束标志55AA)重新建立分区表。搜索过程可以采用“自动”或“交互”两种方式进行。自动方式保留发现的每一个分区,适用于大多数情况。交互方式对发现的每一个分区都给出提示,由用户选择是否保留。当自动方式重建的分区表不正确时,可以采用交互方式重新搜索。重建过程中,搜索到的分区都将及时显示在屏幕上。但不立即存盘,因此,你可以反复搜索,直到正确的建立分区表之后再存盘。此功能的操作非常简单,只需选择执行“工具”菜单下的“重建分区”命令即可。 此功能是修复逻辑盘丢失故障最简便的方法,特别是“治疗”因使用Pqmagic不当导致的种种硬盘故障的“特效药”。
300个注册表优化修改文件 经过了半个小时终于弄完了,希望能对大家有所帮助 如果怕弄不好注册表就先给注册表备份1下,介绍几个个手动备份的方法:} 1.win98下在DOS下scanreg/backup(备份)scanreg/regore(恢复) scanreg/fix(修复) 2.打开regedi.exe文件,然后手动导出整个注册表文件为*.reg,想恢复直接双击这个*.reg 3.在运行下进入msconfig里然后选择常规后,创建备份和还原备份K 4.不完全注册表恢复,XP和2000重起机器按F8进入,选择上1次正确配置F Office的亲密接触: 点击浏览该文件 改变Word文档日期的显示格式.reg 将Word插入对象的名称汉化.reg 设置Office的安装位置.reg 设置Word中的文件保存路径.reg 设置是否显示Office助手.reg 安全与限制 : 点击浏览该文件 从浏览清单中隐藏服务器.reg 给屏幕保护都加上密码.reg 关闭最近文件夹使用时间.reg 解除屏幕保护密码.reg 禁用打印机中的删除打印机.reg 禁用打印机中的添加打印机.reg 禁用控制面板.reg 禁用任务管理器.reg 禁用添加删除程序.reg 禁用文件夹选项菜单.reg 禁用用户追踪功能.reg 禁止打印机共享.reg 禁止对任务栏位置进行改变.reg 禁止改变打印机设置.reg 禁止更改IE的辅助功能设置.reg 禁止更改控制面板和打印机.reg 禁止光标闪烁.reg 禁止将最近访问过的共享资源添加到网上邻居里.reg 禁止密码缓存.reg 禁止使用inf文件.reg 禁止使用MS-DOS方式.reg 禁止使用拨号网络.reg 禁止使用鼠标右键.reg 禁止使用网上邻居.reg 禁止使用自动升级功能.reg 禁止添加打印机.reg 禁止系统检测网络的连接速度.reg 禁止显示前一个登录者的名字.reg 禁止向“开始”中的“文档”保留历史记录.reg 禁止修改控制面版.reg 禁止修改显示属性.reg 禁止用户调整桌面工具栏的长度.reg 禁止用户改动桌面工具栏.reg 禁止用户使用reg文件.reg 禁止远程修改注册表.reg 禁止运行任何程序.reg 禁止在网络中显示标识属性.reg 屏蔽掉添加打印机项.reg 屏蔽所有的系统热键.reg 设置密码的安全要求.reg 系统启动时禁用计划任务.reg 系统启动时运行可执行程序.reg 移去Windows XP中的共享目录.reg 增加驱动程序的识别级别.reg 找回“丢失”的运行、注销和关闭系统.reg 只允许用户使用特定的屏幕保护.reg 指定密码的最小长度.reg 个性化你的IE和OUTLOOK : 点击浏览该文件 打造个性化的IE.reg 定制IE的文字大小.reg 定制IE字体的大小.reg 改变IE的默认下载目录.reg 更改Outlook Express的标题栏.reg 解决IE首页无法更改的问题.reg 禁止IE播放视频.reg 禁止IE的代理服务器.reg 禁止IE浏览器的脚本调试程序.reg 禁止IE浏览器的升级检查.reg 禁止IE显示图片.reg 禁止IE自动安装组件.reg 禁止Outlook Express用户打开可能包含病毒的附件.reg 禁止打开或保存带病毒的Outlook邮件.reg 去掉IE内的分级审查口令.reg 让IE多线程下载.reg 设定IE的Cookies目录.reg 设置IE的Cache目录.reg 设置IE的历史目录.reg 设置IE的起始页.reg 设置IE的收藏目录.reg 设置IE发生错误时是否允许报错.reg 锁定IE的下载功能.reg 修改IE的标题栏.reg 修改IE的产品ID.reg 修改默认的E-mail地址.reg 增加IE的自动识别功能.reg 个性化你的系统 : 点击浏览该文件 不显示开始菜单中收藏夹菜单.reg 不显示上次登录的用户名.reg 打造独具特色的电脑标识.reg 调整Windows XP的浏览速度.reg 定制进入Windows前的欢迎信息.reg 改变菜单及工具提示的转换效果.reg 改变窗口变化时的动感效果.reg 改变光标的闪烁速度.reg 改变回收站的名称.reg 改变下拉菜单的对齐方式.reg 改变桌面图标的大小.reg 个性化设置计划任务.reg 给当前文件或文件夹换换颜色.reg 更改“我的公文包”的图标.reg 更改【回收站】满的时候的提示信息.reg 更改Internet Explorer的图标.reg 更改打印机图标.reg 更改登录时的背景图案.reg 更改控制面板的图标.reg 更改设备管理器中的硬件设备名称.reg 更改设备管理器中的硬件设备图标.reg 更改收件箱的图标.reg 解决Windows98第2版无法升级到Windows 2000的问题.reg 禁止使用任务栏.reg 快捷方式四个字不在了.reg 扩展鼠标右键功能.reg 密码提示语.reg 去除工具栏提示.reg 让Windows字体更平滑.reg 让点击这里开始的提示信息消失.reg 让计算机以12小时制显示时间.reg 任何地方都可以清空回收站.reg 如何设置优化页面文件.reg 如何在桌面上显示Windows版本标志.reg 删除开始菜单中的注销选项.reg 设置CD-ROM的缓存区.reg 设置关机对话框中的选项.reg 设置开始菜单使用多页面显示.reg 设置如何拖动整个窗口.reg 设置鼠标缓冲区.reg 设置图标之间的垂直间距.reg 设置文件系统的缓冲.reg 使窗口做到自动刷新.reg 使用64位真彩色.reg 文件测试.reg 修改Windows XP的版本号.reg 以高彩色分辨率显示图标.reg 隐藏桌面上的所有图标.reg 隐藏桌面上所有图标.reg 在启动计算机时运行屏幕保护程序.reg 在鼠标右键菜单中增加重新启动计算机的功能.reg 找回丢失的频道栏.reg 拯救你的任务栏.reg 自动关闭计算机.reg 自动设定显示器的刷新频率.reg 优化你的网络: 点击浏览该文件 改变下载的路径.reg 加快上网速度.reg 控制拨号网络的密码保存.reg 屏蔽整个网络.reg 启用IP过滤功能.reg 启用路由功能.reg 清理访问网络邻居后留下的字句信息.reg 取出映射网络驱动器和断开网络驱动器.reg 去除网上邻居里的邻近的计算机项.reg 设置HTTP 1.1协议的支持.reg 设置WINS服务器解析超时时间.reg 设置浏览器Cache的大小.reg 设置慢速网络连接超时时间.reg 设置网络连接的超时时间.reg 设置自动拨号功能.reg 隐藏上机用户登录的名字.reg 系统优化: 点击浏览该文件 不让CD-ROM自动运行.reg 不显示远程管理.reg 彻底关闭Dr.Warson.reg 打开或关闭启动优化功能.reg 调整Windows XP的浏览速度.reg 改进核心系统性能.reg 更改标准时间的名称.reg 关闭硬盘空间不足时发出警告.reg 关机时自动清除文件记录.reg 关机时自动删除交换文件.reg 恢复注册表禁用.reg 激活DOS的快速编辑模式.reg 计算机启动时自动运行屏幕保护程序.reg 加快程序的运行速度.reg 加快程序运行速度.reg 加快关机速度.reg 简单明了的任务管理器.reg 将mp3的音质调整到96kbps.reg 进入Windows后自动打开数字小键盘.reg 禁用长文件名中的~字符.reg 禁用关闭系统.reg 禁止访问任务栏的属性.reg 禁止改变工具栏的内容.reg 禁止删除打印机.reg 开启CPU的二级缓存.reg 控制CD-ROM的自动播放.reg 快速重启计算机.reg 扩充回收站的鼠标右键功能.reg 屏蔽资源管理器中的文件菜单.reg 启用自动优化磁盘功能.reg 取消无用的登录.reg 取消重启计算机并切换到MS-DOS功能.reg 去掉Windows XP的自动更新功能.reg 让Windows退出时不保存环境设置.reg 让程序在单独的内存空间运行.reg 让电脑跑的更快.reg 让电脑运行得更快.reg 让光标不再闪烁.reg 让系统还原占用的磁盘空间更小.reg 如何提高软驱的性能.reg 删除文档菜单中的我的文档选项.reg 设定开始菜单中文档的显示数量.reg 设定蓝屏时自启动.reg 设置DOS下的自动填充命令.reg 设置Windows的安装路径信息.reg 设置窗口的缩放控制.reg 设置禁用活动桌面.reg 设置鼠标的滚动行数.reg 设置拖动整个窗口.reg 设置显示文件的扩展名.reg 设置在我的电脑中显示打印机.reg 鼠标自动激活当前窗口.reg 缩短关闭无响应程序时的等待时间.reg 提高光驱的读写能力.reg 提高历史缓冲区的个数.reg 提高软驱的性能.reg 提高显示器刷新频率.reg 停用Windows的文件高速缓存.reg 退出时不保存环境设置.reg 完全禁用系统还原.reg 消除软件显示乱码.reg 修改键盘缓冲大小.reg 修改默认CD播放器.reg 修改我的电脑的名称.reg 修正快速关机引起的问题.reg 延长Windows终止服务时间.reg 隐藏我的电脑中的驱动器.reg 隐藏资源管理器工具栏上的搜索按钮.reg 用其他方式打开我的电脑.reg 用文件管理器打开我的电脑.reg 优化硬盘驱动器.reg 在Windows下修改nVIDIA显卡的Direct3D刷新率.reg 在开始菜单中添加注销项.reg 在软驱的右键菜单中增加“清空A盘”的命令.reg 在右键菜单中添加关闭计算机命令.reg 增加鼠标缓冲区.reg 找回安装密码.reg 拯救任务栏.reg 自动终止锁死程序.reg 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 注册表被锁和一些常用东西被限制解锁 注册表紧急解锁 显示运行、注销、网上邻居、控制面板等 有些注册表REG文件根据你的情况而自己手动修改 有需要的就拿去吧``做人要厚道一点 下了帮顶一下
目录:(1#)代表第一层楼,以下类推<br><br>2000XP双系统启动问题 (1#)<br> <br>ADSL拨号中出现的错误代码(2#)<br><br>at命令的用法(3#)<br><br>AWARD BIOS设置详解 (上)(4#)<br><br>AWARD BIOS设置详解( 下)(5#)<br><br>BB是报警的声音(6#)<br><br>开机BIOS语言(7#)<br><br>BIOS可以被映射(8#)<br><br>BIOS与CMOS区别(9#)<br><br>CMOS密码清除方法(10#)<br><br>在DOS下安装Win XP(11#)<br><br>在DOS中使用系统还原工具(12#)<br><br>Explorer.exe程序在系统中的作用(13#)<br><br>folder.htt等文件的问题(14#)<br><br>found.000文件夹的问题(15#)<br><br>让IE以最大化显示(16#)<br><br>Mfm1992文件问题(17#)<br><br>Regsvr32 用法和错误消息的说明(18#)<br><br>Regsvr32使用方法(19#)<br><br>Regsvr32命令修复系统故障(20#)<br><br>RUNDLL32.EXE 是什么程序(上)(21#)<br><br>RUNDLL32.EXE 是什么程序(下)(22#)<br><br>SFC使用方法(23#)<br><br>Windows2000/XP启动过程详解(24#)<br><br>Win2000进程(25#)<br><br>在Windows 2000使用纯DOS的方法(26#)<br><br>Win2000设置技巧(27#)<br><br>Windows常用命令集(28#)<br><br>巧妙安装各种Windows操作系统(29#)<br><br>windows下的EXE文件大揭密(30#)<br><br>Windows XP 常见的进程列表(31#)<br><br>xp的boot.ini文件内容(32#)<br><br>windowsXP你不可不知道的秘密哦!~(33#)<br><br>WinXP开机菜单含义(34#)<br><br>XP轻松实现免激活升级(35#)<br><br>{XP去除开机登陆画面!)(36#)<br><br>WinXP瘦身办法(37#)<br><br>XP瘦身,减肥大全(38#)<br><br>体验Windows XP系统内置的AT命令(39#)<br><br>WinXP/2000操作系统自动关机的实现(40#)<br><br>WINXP优化精髓1(41#)<br><br>WINXP优化精髓2(42#)<br><br>WINXP优化精髓3(43#)<br><br>WINXP优化精髓4(44#)<br><br>在Windows XP中对文件进行加密(45#)<br><br>在Windows XP中运行DOS程序(46#)<br><br>XP重装需要激活的问题(47#)<br><br>巧妙安装各种Windows操作系统(48#)<br><br>操作系统进程描述1(49#)<br><br>操作系统进程描述2(50#)<br><br>操作系统进程描述3(51#)<br><br>操作系统与系统配置(52#)<br><br>常遇电脑故障应急处理方法(53#)<br><br>常见死机原因剖析(54#)<br><br>【关闭系统时的死机】(55#)<br><br>处理冲击波(56#)<br><br>磁盘格式的问题(57#)<br><br>电脑死机故障分析(58#)<br><br>更改IE的默认搜索引擎(59#)<br><br>更改临时文件夹的路径(60#)<br><br>更改屏幕保护程序关联方式(61#)<br><br>调整调出输入法的顺序(62#)<br><br>更改系统源文件途径(63#)<br><br>工具地址(64#)<br><br>关闭WinXP的错误报告(65#)<br><br>快速关闭没有响应的程序(66#)<br><br>黑屏的几个原因(67#)<br><br>恢复“开始”菜单中的“运行”(68#)<br><br>加快WinXP窗口显示速度(69#)<br><br>加快软驱传输速度(70#)<br><br>解决A盘不见的方法(71#)<br><br>解决EXE关联丢失方法(72#)<br><br>解决IE二级链接方法(73#)<br><br>解决IE器常见故障(77#)<br><br>解决IP地址冲突的方法(75#)<br><br>解决NTFS下Win2000密码丢失(76#)<br><br>解开被锁定的.reg与.inf文件(77#)<br><br>Windows98不能正常关机解决法(78#)<br><br>解决WinXP启动慢问题(79#)<br><br>解决WinXP搜索故障(80#)<br><br>解决XP输入法不见问题(81#)<br><br>解决XP搜索失效问题(82#)<br><br>解决不定时搜寻软驱问题(83#)<br><br>部分软件无法安装(84#)<br><br>解决插电即开机问题(85#)<br><br>解决窗口按钮上乱码问题(86#)<br><br>打开硬盘分区出错(87#)<br><br>注册表文件不出现确认对话框(88#)<br><br>多系统安装(89#)<br><br>解决多硬盘盘符混乱问题(90#)<br><br>系统关机变重启故障(91#)<br><br>光驱读盘不正常(92#)<br><br>回收站无法清空(93#)<br><br>解决活动窗口按钮被改写(94#)<br><br>解决接通电源后自动开机问题(95#)<br><br>操作系统停止响应(96#)<br><br>解决开机ESCD错误(97#)<br><br>开始菜单响应速度过慢(98#)<br><br>解决控件提示问题(99#)<br><br>解决某些网页不能访问(100#)<br><br>“内存不足”的解决方法(101#)<br><br>任务栏的图标变大了(102#)<br><br>解决鼠标乱动问题(103#)<br><br>解决鼠标右键被锁定(104#)<br><br>解决“添加删除程序”里面隐藏问题(105#)<br><br>win98图标老乱套,与文件类型不配(106#)<br><br>网页恶意代码的十一大危害及其解决方案(107#)<br><br>找回Administrator账户密码(108#)<br><br>"文件保护"的解决方法(109#)<br><br>双击无法打开文件夹(110#)<br><br>解决无法关机问题(111#)<br><br>无法升级更新(112#)<br><br>系统无法自动保存设置(113#)<br><br>解决系统声音不正常(114#)<br><br>解决系统托盘区的图标丢失(115#)<br><br>系统无法自动保存设置(116#)<br><br>解决系统资源不足问题(117#)<br><br>解决系统资源严重不足(118#)<br><br>解决显示器花屏问题(119#)<br><br>“蓝屏”的几个原因(120#)<br><br>解决限制使用应用程序问题(121#)<br><br>音量为何会自动调节(122#)<br><br>应用程序不能启动(123#)<br><br>解决硬盘坏磁道问题(124#)<br><br>硬盘引导型故障分析及排除(125#)<br><br>加快右键菜单的响应速度(126#)<br><br>解决右键发送到问题(127 #)<br><br>解决桌面图标乱的方法(128#)<br><br>解决自动搜索软驱(129#)<br><br>禁用指定DOS命令办法(130#)<br><br>禁止ipc$默认共享的方法(131#)<br><br>禁止Win2000启动时读软驱(132#)<br><br>禁止winxp的默认硬盘共享(133#)<br><br>禁止WinXP文件夹自动展开(134#)<br><br>禁止光盘自动运行(135#)<br><br>控制面板大全(136#)<br><br>破解IE分级密码(137#)<br><br>破解网页禁用鼠标右键(138#)<br><br>巧妙清除Windows XP任务栏的隐藏图标记录(139#)<br><br>取消磁盘扫描(140#)<br><br>取消磁盘扫描前的等待时间(141#)<br><br>如何保存网页的背景音乐(142#)<br><br>如何彻底删除输入法文件(143#)<br><br>如何防止恶意网页篡改注册表(144#)<br><br>如何关闭CD自动播放功能(145#)<br><br>如何关闭Dr.Watson(146#)<br><br>NTFS格式下加、解密问题(147#)<br><br>如何进入BIOS设置?(148#)<br><br>如何启动休眠功能(149#)<br><br>如何清除冰河(150#)<br><br>如何让注册表保持在根目录(151#)<br><br>如何设置从光驱启动(12#)<br><br>设置“显别人的IP”(153#)<br><br>电脑显示器的相关设置与常见故障排除方法(154#)<br><br>如何实现关机时清空页面文件(155#)<br><br>如何使IE不再发送错误报告(156#)<br><br>如何使用Tasklist命令(157#)<br><br>如何使用系统还原(158#)<br><br>如何锁住桌面背景(159#)<br><br>如何挽救已受物理损坏的软盘中的文件(160#)<br><br>如何移动收藏夹(161#)<br><br>如何隐藏磁盘驱动器(162#)<br><br>如何优化电脑系统的BIOS?(163#)<br><br>如何找到自启动程序(164#)<br><br>如何直接移动应用程序(165#)<br><br>重新安装IE浏览器(166#)<br><br>如何自动重启(167#)<br><br>删除右键菜单的内容(168#)<br><br>删除NTFS分区(169#)<br><br>删除屏幕保护和壁纸(170#)<br><br>删除启动选项中的选项(171#)<br><br>删除遗留的鼠标右键菜单项(172#)<br><br>删除“添加/删除程序”中的无效信息(173#)<br><br>删除系统备份文件(174#)<br><br>删除信使服务(175#)<br><br>删除虚拟光驱创建的盘符(176#)<br><br>删除隐藏不活动的图标(177#)<br><br>设置窗口自动刷新(178#)<br><br>设置开始菜单中的用户名(179#)<br><br>设置任务管理器(180#)<br><br>设置虚拟内存(181#)<br><br>什么时信使服务(182#)<br><br>什么是 DirectX(183#)<br><br>什么是host表(184#)<br><br>什么是POP3(185#)<br><br>什么是丢包(186#)<br><br>端口概念1(187#)<br><br>端口概念2(188#)<br><br>什么是软件版本标志(189#)<br><br>双系统安装方法(190#)<br><br>双系统的安全卸载(191#)<br><br>双系统共用虚拟内存(192#)<br><br>双系统默认启动项更改(193#)<br><br>双系统问题集合(194#)<br><br>双系统问题集合(195#)<br><br>通过CMOS设置定时开机(196#)<br><br>为文件夹添加背景音乐(197#)<br><br>限制驱动器的使用(198#)<br><br>虚拟软驱(199#)<br><br>隐藏光驱的方法(200#)<br><br>隐藏控制面板中的选项(201#)<br><br>隐藏启动程序方法(202#)<br><br>隐藏驱动器一法(203#)<br><br>隐藏添加删除程序(204#)<br><br>隐藏桌面‘回收站’的两个方法(205#)<br><br>隐藏桌面所有图标(206#)<br><br>处理硬盘物理坏道方法(207#)<br><br>运行命令(208#)<br><br>在Windows 2000使用纯DOS的方法(209#)<br><br>在Windows XP中运行DOS程序(210#)<br><br>找回“显示桌面”按钮(211#)<br><br>找回丢失的桌面图标透明效果(212#)<br><br>自动安装Windows XP(213#)<br><br>自动关闭停止响应程序(214#)<br><br>关闭小键盘上的NumLock(215#)<br><br>清除地址栏中的记录(216#)<br><br>自动释放系统资源(217#)<br>
样加快电脑开机时间 一、BIOS的优化设置   在BIOS设置的首页我们进入“Advanced BIOS Features”选项,将光标移到“Frist Boot Device”选项,按“PageUP”和“PageDOWN”进行选择,默认值为“Floppy”,这表示启动时系统会先从软驱里读取启动信息,这样做会加长机器的启动时间,减短软驱的寿命。所以我们要选“HDD-0”直接从硬盘启动,这样启动就快上好几秒。另外,对于BIOS设置中的“Above 1MbMemoryTest”建议选“Disabled”,对于“QuickPowerOnSelftest”建议选择Enabled。   在“Advanced Chipset Features”项中的设置对机子的加速影响非常大,请大家多加留意。将“Bank 0/1 DRAM Timing”从“8ns/10ns”改为“Fast”或“Turbo”。“Turbo”比“Fast”快,但不太稳定,建议选“Fast”。如果内存质量好可以选“Turbo”试试,不稳定可以改回“Fast”。   对于内存品质好的内存条建议在“SDRAM CAS Latency”选项中设置为“2”,这样可以加快速度哦。   较新的主板都支持AGP4X,如果你的显卡也支持AGP4X,那么就在“AGP-4XMode”处将这项激活,即选为“Enabled”,这才会更好的发挥显卡的能力,加快系统启动速度。   二、启动DMA方式,提高硬盘速度   采用UDMA/33、66、100技术的硬盘最高传输速率是33MB/s、66MB/s、100MB/s,从理论上来说是IDE硬盘(这里是指PIO MODE4 模式,其传输率是16.6MB/s)传输速率的3~6倍,但是在Windows里面缺省设置中,DMA却是被禁用的,所以我们必须将它打开。   具体方法是:打开“控制面板→系统→设备管理器”窗口,展开“磁盘驱动器”分支,双击UDMA硬盘的图标,进入“属性→设置→选项”,在“DMA”项前面“√”,然后按确定,关闭所有对话框,重启电脑即可。   三、去掉Windows的开机标志。   首先你要打开“开始”→“设置”→“文件夹选项”,从“查看”标签里的“高级设置”列表框中勾选“显示所有文件”。然后打开C盘,找到MSdos.sys这个文件,并取消它的“只读”属性,打开它,在“Option”段落下,加上一行语句:LOGO=0,这样Windows的开机图案就不会被加载运行,开机时间也可以缩短3秒钟。   四、优化“启动”组。   电脑初学者都爱试用各种软件,用不多久又将其删除,但常常会因为某些莫名其妙的原因,这些软件还会驻留在“启动”项目中(尤其是在使用一些D版软件时),Windows启动时就会为此白白浪费许多时间。要解决这个问题,其实很简单,你可以打开“开始”→“运行”,在出现的对话框的“打开”栏中选中输入“msconfig”,然后点击“确定”,就会调出“系统配置实用程序”,点击其中的“启动”标签,将不用载入启动组的程序前面的“√”去掉就可以了。如此一来,至少可以将启动时间缩短10秒。   五、整理、优化注册表。   Windows在开机启动后,系统要读取注册表里的相关资料并暂存于RAM(内存)中,Windows开机的大部分时间,都花费了在这上面。因此,整理、优化注册表显得十分必要。有关注册表的优化,可以使用Windows优化大师等软件。以Windows优化大师,点击“注册信息清理”→“扫描”(如图1),软件就会自动替你清扫注册表中的垃圾,在扫描结束后,会弹出个菜单让你选择是否备份注册表,建议选择备份,备份后再点击“清除”即可。   六、经常维护系统。   如果在系统中安装了太多的游戏、太多的应用软件、太多的旧资料,会让你的电脑运行速度越来越慢,而开机时间也越来越长。因此,最好每隔一段时间,对电脑做一次全面的维护。点击“开始”→“程序”→“附件”→“系统工具”→“维护向导”,然后点击“确定”按钮即可对电脑进行一次全面的维护,这样会使你的电脑保持在最佳状态。对于硬盘最好能每隔2个星期就做一次“磁盘碎片整理”,那样会明显加快程序启动速度的,点击“系统工具”→“磁盘碎片整理程序”即可。注意在整理磁盘碎片时系统所在的盘一定要整理,这样才能真正加快Windows的启动顺序。   七、扩大虚拟内存容量。   如果你的硬盘够大,那就请你打开”控制面板“中的“系统”,在“性能”选项中打开“虚拟内存”,选择第二项:用户自己设定虚拟内存设置,指向一个较少用的硬盘,并把最大值和最小值都设定为一个固定值,大小为物理内存的2倍左右。这样,虚拟存储器在使用硬盘时,就不用迁就其忽大忽小的差别,而将固定的空间作为虚拟内存,加快存取速度。虚拟内存的设置最好在“磁盘碎片整理”之后进行,这样虚拟内存就分不在一个连续的、无碎片文件的空间上,可以更好的发挥作用。   八、去掉“墙纸”、“屏幕保护”等花哨的设置。   这些设置占用系统资源不说,还严重影响Windows的启动顺序。去掉它们的方法是:在桌面空白处点击鼠标右键,在弹出的菜单中选择“属性”,在弹出的对话框中分别选择“背景”和“屏幕保护程序”标签,将“墙纸”和“屏幕保护程序”设置为“无”即可。   九、删除Autoexec.bat和Config.sys。   系统安装盘根目录下的Autoexec.bat和Config.sys这两个文件,Windows已经不需要它们了,可以将它们安全删除,这样可以加快Windows的启动速度。   十、精简*.ini文件,尤其是System.ini和Win.ini的内容。   在system.ini的[boot]和[386Enh]小节中加载了许多驱动程序和字体文件,是清除重点。尤其要注意的是,[boot]字段的shell=Explorer.exe是木马喜欢的隐蔽加载之所,木马们通常会将该句变为这样:shell=Explorer.exe file.exe,注意这里的file.exe就是木马服务端程序!有了木马随后加载运行不仅对系统安全造成了威胁,电脑启动也慢了许多;对Win.ini中的“Run”及“Load”后面加载的、不是每次开机必须运行的程序,可以暂时清除,等以后要用时再点击运行。这样开机时Windows调用的相关文件就会减少许多,启动速度自然就会快多了。   十一、关闭磁盘扫描。   用文本编辑器打开msdos.sys,会看到以下内容: [Options] bootmulti=1 bootgui=1 autoscan=1   如果不想非正常关机后运行磁盘扫描程序,可以把atuoscan=1改为autoscan=0,这样在非正常关机后计算机的启动速度也会快上一些(因为scandisk没有运行嘛)。   十二、让引导信息停留时间最短。   用文本编辑器打开msdos.sys,设置[Options]中的BootDelay为0即可。   十三、减少不必要的字体文件。   字体文件占用系统资源多,引导时很慢,并且占用硬盘空间也不少。因此尽量减少不必要的字体文件。但如果删错了字体文件,搞不好会使Windows不正常。因此可以采用下面这个“偷梁换柱”的方法(可以实现字体文件的安装,而不占用大量的磁盘空间):首先打开字库文件夹(如F:zk),选中全部TrueType字体文件,用鼠标的右键将它们拖动到C:WindowsFonts文件夹中,在弹出的菜单中选择“在当前位置创建快捷方式”,这样就可以在系统的字体文件夹下建立字库文件的快捷方式了。当需要使用这些字库文件时,只要插入字库光盘,不用时取出就可以了。   十四、删去多余的Dll文件。在Window操作系统的System子目录里有许多的Dll文件,这些文件可能被许多文件共享,但有的却没有没有一个文件要使用它,也就是说这些文件没用了,为了不占用硬盘空间和提高启动运行速度,完全可以将其删除。   十五、“旁门左道”的办法。如采用系统悬挂,即将当前系统状态在关机后保存,下次开机后,系统会直接进入上次关机前的桌面,用这种方法,开机时间最快可以达到4-5秒钟,但不是所有的主板BIOS都支持的,设置起来也稍显麻烦。   打开注册表,展开到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSharedDlls子键,在右边的有许多Dll文件,如果数据为0,则可以判定该Dll文件没有程序共享,可以删掉它。   如果按以上的方法做了电脑启动速度仍不够快,除了升级硬件(CPU、内存、硬盘等)外,另一个好办法是重装系统,这样可以明显加快电脑启动速度! 其他回答 有一个“BootVis”程序(绿色软件),是微软公司出品的专为Windows XP操作系统设计的加速程序。使用这个很小的加速程序,您会感到Windows XP启动速度明显加快。 注意:这个最新版本适用于Windows XP SP1平台,支持Intel P4 HT技术。 简易用法:(这里引用的是我自己汉化的中文版-620K无法上传,你若是下载的该是英文的) 1. 启动BootVis,单击“工具”菜单的“选项”,在“标志路径”框中键入BootVis程序所在路径(例如:D:\XP加速程序\ ),单击“保存”按钮。 2. 在“跟踪”菜单中,单击“下一引导”,再单击“确定”按钮,此时BootVis程序会引导WinXP重新启动,并记录启动进程,生成相关的BIN文件。 3. 重新启动后,BootVis仍在运行中,请在“跟踪”菜单中,单击“优化系统”命令即可。
VC之美化界面篇 作者:白乔 链接:http://vcer.net/1046595482643.html 本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理; 2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制; 3. 熟悉OOP理论和技术; 本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。 1 美化界面之开题篇 相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面: 图1 瑞星杀毒软件的精美界面 程序的功能如何如何强大是一回事,它的用户界面则是另一回事。千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。 “受之以鱼,不若授之以渔”,本教程并不会向你推荐《瑞星杀毒软件》精美界面的具体实现,而只是向你推荐一些常用的美化方法。 2 美化界面之基础篇 美化界面需要先熟悉Windows下的绘图操作,并明白Windows的幕后绘图操作,才能有的放矢,知道哪些可以使用,知道哪些可以避免…… 2.1 Windows下的绘图操作 熟悉DOS的读者可能就知道:DOS下面的图形操作很方便,进入图形模式,整个屏幕就是你的了,你希望在哪画个点,那个地方就会出现一个点,红的、或者黄的,随你的便。你也可以花点时间画个按钮,画个你自己的菜单,等等…… Windows本身就是图形界面,所以Windows下面的绘图操作功能更丰富、简单。要了解Windows下的绘图操作,要实现Windows界面的美化,就必须了解MFC封装的设备环境类和图形对象类。 2.1.1 设备环境类 Windows下的绘图操作说到底就是DC操作。DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows的设备无关性。 MFC的CDC类封装了Windows API 中大部分的画图函数。CDC的常见操作函数包括: Drawing-Attribute Functions:绘图属性操作,如:设置透明模式 Mapping Functions:映射操作 Coordinate Functions:坐标操作 Clipping Functions:剪切操作 Line-Output Functions:画线操作 Simple Drawing Functions:简单绘图操作,如:绘制矩形框 Ellipse and Polygon Functions:椭圆/多边形操作 Text Functions:文字输出操作 Printer Escape Functions:打印操作 Scrolling Functions:滚动操作 *Bitmap Functions:位图操作 *Region Functions:区域操作 *Font Functions:字体操作 *Color and Color Palette Functions:颜色/调色板操作 其中,标注*项会用到相应的图形对象类,参见2.1.2内容。 2.1.2 图形对象类 设备环境不足以包含绘图功能所需的所有绘图特征,除了设备环境外, Windows还有其他一些图形对象用来储存绘图特征。这些附加的功能包括从画线的宽度和颜色到画文本时所用的字体。图形对象类封装了所有六个图形对象。 下面的表格列出了MFC的图形对象类: MFC类 图形对象句柄 图形对象目的 CBitmap HBITMAP 内存中的位图 CBrush HBRUSH 画刷特性—填充某个图形时所使用的颜色和模式 CFont HFONT 字体特性—写文本时所使用的字体 CPalette HPALETTE 调色板颜色 CPen HPEN 画笔特性—画轮廓时所使用的线的粗细 CRgn HRGN 区域特性—包括定义它的点 表1 图形对象类和它们封装的句柄 使用CDC和图形对象类,在Windows里绘图还算是很简单的。观察以下的画面: 图2 使用CDC绘制出的按钮 该画面通过以下代码自行绘制的假按钮: BOOL CUi1View::PreCreateWindow(CREATESTRUCT& cs) { //设置背景色 //CBrush CUi1View::m_Back m_Back.CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); cs.lpszClass = AfxRegisterWndClass(0, 0, m_Back, NULL); return CView::PreCreateWindow(cs); } int CUi1View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //创建字体 //CFont CUi1View::m_Font m_Font.CreatePointFont(120, "Impact"); return 0; } void CUi1View::OnDraw(CDC* pDC) { //绘制按钮框架 pDC->DrawFrameControl(CRect(100, 100, 220, 160), DFC_BUTTON, DFCS_BUTTONPUSH); //输出文字 pDC->SetBkMode(TRANSPARENT); pDC->TextOut(120, 120, "Hello, CFan!"); } 呵呵,不好意思,这并不是真的Windows按钮,它只是一个假的空框子,当用户在按钮上点击鼠标时,放心,什么事情都不会发生。 2.2 Windows的幕后绘图操作 在Window中,如果所有的界面操作都由用户代码来实现,那将是一个很浩大的工程。笔者曾经在DOS设计过窗口图形界面,代码上千行,但实现的界面还是很古板、难看,除了我那个对编程一窍不通的女友,没有一个人欣赏它L;而且,更要命的是,操作系统,包括别的应用程序并不认识你的界面元素,这才是真正悲哀的。认识这些界面的只有你的程序,图2中的按钮永远只是一个无用的框子。 有了Windows,一切都好办了,Windows将诸如按钮、菜单、工具栏等等这些通用界面的绘制及动作都交给了系统,程序员就不用花心思再画那些按钮了,可以将更多的精力放在程序的功能实现方面。 所有的标准界面元素都被Windows封装好了。Windows知道怎么画你的菜单以及你的标注着“Hello, Cfan!”的按钮。当CFan某个快乐的小编(譬如:小飞)点击这个按钮的时候,Windows也明白按钮按下去的时候该有的模样,甚至,当这个友好的按钮获取焦点时,Windows也会不失时机地为它准备一个虚框…… 有利必有弊。你的不满这时候产生了:你既想使用Windows的True Button,可也嫌它的界面不够好看,譬如,你喜欢用蓝色的粗体表达你对CFan的无限情怀(正如图2那样)——人心不足,有办法吗?有的。 3 美化界面之实现篇 Windows还是给程序员留下了很多后门,通过一些途径还是可以美化界面的。本章节我们系统学习一下Windows界面美化的实现。 3.1 美化界面的途径 如何以合法的手段来达到美化界面的效果?一般美化界面的方法包括: 1. 使用MFC类的既有函数,设定界面属性; 2. 利用Windows的消息机制,截获有用的Windows的消息。通过MFC的消息映射(Message Mapping)和反射(Message Reflecting)机制,在Windows准备或者正在绘制该元素时,偷偷修改它的状态和行为,譬如:让按钮的边框为红色; 3. 利用MFC类的虚函数机制,重载有用的虚函数。在MFC框架调用该函数的时候,重新定义它的状态和行为; 一般来说,应用程序可以通过以下两种途径来实现以上的方法: 1. 在父窗口里,截获自身的或者由子元素(包括控件和菜单等元素)传递的关于界面绘制的消息; 2. 子类化子元素,或者为子元素准备一个新的类(一般来说该类必须继承于MFC封装的某个标准类,如:CButton)。在该子元素里,截获自身的或者从父窗口反射过来的关于界面绘制的消息。譬如:用户可以创建一个CXPButton类来实现具有XP风格的按钮,CXPButton继承于CButton。 对于应用程序,使用CXPButton类的途径相对于对话框窗口和普通窗口分成两种: ① 对话框窗口中,直接将原先绑定按钮的CButton类替换成CXPButton类,或者在绑定变量时直接指定Control类型为CXPButton,如图3所示: 图3 为按钮指定CXPButton类型 ②在普通窗口中,直接创建一个CXPButton类对象,然后在OnCreate()中调用CXPButton的Create方法; 以下的章节将综合地使用以上的方法,请读者朋友留心观察。 3.2 使用MFC类的既有函数 在界面美化的专题中,MFC也并非一无是处。MFC类对于界面美化也做了部分的努力,以下是一些可以使用的,参数说明略去。 CWinApp::SetDialogBkColor void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) ); 指定对话框的背景色和文本颜色。 CListCtrl::SetBkColor CReBarCtrl::SetBkColor CStatusBarCtrl::SetBkColor CTreeCtrl::SetBkColor COLORREF SetBkColor( COLORREF clr ); 设定背景色。 CListCtrl::SetTextColor CReBarCtrl::SetTextColor CTreeCtrl::SetTextColor COLORREF SetTextColor( COLORREF clr ); 设定文本颜色。 CListCtrl::SetBkImage BOOL SetBkImage( LVBKIMAGE* plvbkImage ); BOOL SetBkImage( HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0); BOOL SetBkImage( LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0 ); 设定列表控件的背景图片。 CComboBoxEx::SetExtendedStyle CListCtrl::SetExtendedStyle CTabCtrl::SetExtendedStyle CToolBarCtrl::SetExtendedStyle DWORD SetExtendedStyle( DWORD dwExMask, DWORD dwExStyles ); 设置控件的扩展属性,例如:设置列表控件属性带有表格线。 图4是个简单应用MFC类的既有函数来改善Windows界面的例子: 图4 使用MFC类的既有函数美化界面 相关实现代码如下: BOOL CUi2App::InitInstance() { //… //设置对话框背景色和字体颜色 SetDialogBkColor(RGB(128, 192, 255), RGB(0, 0, 255)); //… } BOOL CUi2Dlg::OnInitDialog() { //… //设置列表控件属性带有表格线 DWORD NewStyle = m_List.GetExtendedStyle(); NewStyle |= LVS_EX_GRIDLINES; m_List.SetExtendedStyle(NewStyle); //设置列表控件字体颜色为红色 m_List.SetTextColor(RGB(255, 0, 0)); //填充数据 m_List.InsertColumn(0, "QQ", LVCFMT_LEFT, 100); m_List.InsertColumn(1, "昵称", LVCFMT_LEFT, 100); m_List.InsertItem(0, "5854165"); m_List.SetItemText(0, 1, "白乔"); m_List.InsertItem(1, "6823864"); m_List.SetItemText(1, 1, "Satan"); //… } 嗯,这样的界面还算不错吧? 3.3 使用Windows的消息机制 使用MFC类的既有函数来美化界面,其功能是有限的。既然Windows是通过消息机制进行通讯的,那么我们就可以通过截获一些有用的消息来美化我们的界面,以下是一些有用的Windows消息: WM_PAINT WM_ERASEBKGND WM_CTLCOLOR* WM_DRAWITEM* WM_MEASUREITEM* NM_CUSTOMDRAW* 注意,标注*的消息是子元素发送给父窗口的通知消息,其它的为窗口或者子元素自身的消息。 3.3.1 WM_PAINT WM_PAINT消息相信大家都很熟悉,一个窗口要重绘了,就会有一个WM_PAINT消息发送给窗口。 可以响应窗口的WM_PAINT,以更改它们的模样。WM_PAINT的映射函数原型如下: afx_msg void OnPaint(); 控件也是窗口,所以控件也有WM_PAINT消息,通过消息映射我们完全可以定义控件的界面。如图5所示: 图5 利用WM_ PAINT消息美化界面 实现代码也很简单: void CLazyStatic::OnPaint() { CPaintDC dc(this); // device context for painting //什么都不输出,仅仅画一个矩形框 CRect rc; GetClientRect(&rc); dc.Rectangle(rc); } 哈哈,简单吧?不过WM_PAINT确实绝了点,它要求应用程序完成元素界面的所有绘制过程,想象一下如何画出一个完整的列表控件?太烦了吧。一般来说,很少有人喜欢使用WM_PAINT,还有其它更细致的消息。 3.3.2 WM_ERASEBKGND Windows在向窗口发送WM_PAINT消息之前,总会发送一个WM_ERASEBKGND消息通知该窗口擦除背景,默认情况下,Windows将以窗口的背景色清除该窗口。 可以响应窗口(包括子元素)的WM_ERASEBKGND,以更改它们的背景。WM_ERASEBKGND的映射函数原型如下: afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 指定背景是否已清除,如果为FALSE,系统将自动清除 参数: pDC指定了绘制操作所使用的设备环境。 图6是个简单的例子,通过OnEraseBkgnd为对话框加载了一副位图背景: 图6 利用WM_ ERASEBKGND消息美化界面 实现代码也很简单: BOOL CUi4Dlg::OnInitDialog() { //… //加载位图 //CBitmap m_Back; m_Back.LoadBitmap(IDB_BACK); //… } BOOL CUi4Dlg::OnEraseBkgnd(CDC* pDC) { CDC dc; dc.CreateCompatibleDC(pDC); dc.SelectObject(&m_Back); //获取BITMAP对象 BITMAP hb; m_Back.GetBitmap(&hb); //获取窗口大小 CRect rt; GetClientRect(&rt); //显示位图 pDC->StretchBlt(0, 0, rt.Width(), rt.Height(), &dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); return TRUE; } HBRUSH CUi4Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { //设置透明背景模式 pDC->SetBkMode(TRANSPARENT); //设置背景刷子为空 return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); } 同时别忘了响应OnCtlColor,否则窗口里面的控件就不透明了。OnCtlColor的内容。 3.3.3 WM_CTLCOLOR 在控件显示之前,每一个控件都会向父对话框发送一个WM_CTLCOLOR消息要求获取绘制所需要的颜色。WM_CTLCOLOR消息缺省处理函数CWnd::OnCtlColor返回一个HBRUSH类型的句柄,这样,就可以设置前景和背景文本颜色,并为控件或者对话框的非文本区域选定一个刷子。 WM_CTLCOLOR的映射函数原型如下: afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); 返回值: 用以指定背景的刷子 参数: pDC指定了绘制操作所使用的设备环境。 pWnd 控件指针 nCtlColor 指定控件类型,其取值如表2所示: 类型值 含义 CTLCOLOR_BTN 按钮控件 CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑控件 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滚动条 CTLCOLOR_STATIC 静态控件 表2 nCtlColor的类型值与含义 作为一个简单的例子,观察以下的代码: BOOL CUi5Dlg::OnInitDialog() { //… //创建字体 //CFont CUi1View::m_Font1, CUi1View::m_Font2 m_Font1.CreatePointFont(120, "Impact"); m_Font3.CreatePointFont(120, "Arial"); return TRUE; // return TRUE unless you set the focus to a control } HBRUSH CUi5Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor == CTLCOLOR_STATIC) { //区分静态控件 switch(pWnd->GetDlgCtrlID()) { case IDC_STATIC1: { pDC->SelectObject(&m_Font1); pDC->SetTextColor(RGB(0, 0, 255)); break; } case IDC_STATIC2: { pDC->SelectObject(&m_Font2); pDC->SetTextColor(RGB(255, 0, 0)); break; } } } return hbr; } 生成的界面如下: 图7 利用WM_CTLCOLOR消息美化界面 3.3.4 WM_DRAWITEM OnCtlColor只能修改元素的颜色,但不能修改元素的界面框架,WM_DRAWITEM则可以。 当一个具有Owner draw风格的元素(包括按钮、组合框、列表框和菜单等)需要显示外观时,该元素会发送一条WM_DRAWITEM消息至它的隶属窗口(Owner)。 WM_DRAWITEM的映射函数原型如下: afx_msg void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct ); 参数: nIDCtl 该控件的ID,如果该元素为菜单,则nIDCtl为0 lpDrawItemStruct 指向DRAWITEMSTRUCT结构对象的指针,DRAWITEMSTRUCT的结构定义如下: typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; DWORD itemData; }DRAWITEMSTRUCT; CtlType指定了控件的类型,其取值如表3所示: 类型值 含义 ODT_BUTTON 按钮控件 ODT_COMBOBOX 组合框控件 ODT_LISTBOX 列表框控件 ODT_LISTVIEW 列表视图 ODT_MENU 菜单项 ODT_STATIC 静态文本控件 ODT_TAB Tab控件 表3 CtlType的类型值与含义 CtlID 指定自绘控件的ID值,该成员不适用于菜单项 itemID表示菜单项ID,也可以表示列表框或者组合框中某项的索引值。对于一个空的列表框或组合框,该成员的值为?C1。这时应用程序只绘制焦点矩形(该矩形的坐标由rcItem 成员给出)虽然此时控件中没有需要显示的项,但是绘制焦点矩形还是很有必要的,因为这样做能够提示用户该控件是否具有输入焦点。当然也可以设置itemAction 成员为合适值,使得无需绘制焦点。 itemAction 指定绘制行为,其取值为表4中所示值的一个或者多个的联合: 类型值 含义 ODA_DRAWENTIRE 当整个控件都需要被绘制时,设置该值。 ODA_FOCUS 如果控件需要在获得或失去焦点时被绘制,则设置该值。此时应该检查itemState成员,以确定控件是否具有输入焦点。 ODA_SELECT 如果控件需要在选中状态改变时被绘制,则设置该值。此时应该检查itemState 成员,以确定控件是否处于选中状态。 表4 itemAction的类型值与含义 itemState 指定了当前绘制项的状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值为表5中所示值的一个或者多个的联合: 类型值 含义 ODS_CHECKED 标记状态,仅适用于菜单项。 ODS_DEFAULT 默认状态。 ODS_DISABLED 禁止状态。 ODS_FOCUS 焦点状态。 ODS_GRAYED 灰化状态,仅适用于菜单项。 ODS_SELECTED 选中状态。 ODS_HOTLIGHT 仅适用于Windows 98/Me/Windows 2000/XP,热点状态:如果鼠标指针位于控件之上,则设置该值,这时控件会显示高亮颜色。 ODS_INACTIVE 仅适用于Windows 98/Me/Windows 2000/XP,非激活状态。 ODS_NOACCEL 仅适用于Windows 2000/XP,控件是否有快速键。 ODS_COMBOBOXEDIT 在自绘组合框控件中只绘制选择区域。 ODS_NOFOCUSRECT 仅适用于Windows 2000/XP,不绘制捕获焦点的效果。 表5 itemState的类型值与含义 hwndItem 指定了组合框、列表框和按钮等自绘控件的窗口句柄;如果自绘的对象为菜单项,则表示包含该菜单项的菜单句柄。 hDC 指定了绘制操作所使用的设备环境。 rcItem 指定了将被绘制的矩形区域。这个矩形区域就是上面hDC的作用范围。系统会自动裁剪组合框、列表框或按钮等控件的自绘制区域以外的部分。也就是说rcItem中的坐标点(0,0)指的就是控件的左上角。但是系统不裁剪菜单项,所以在绘制菜单项的时候,必须先通过一定的换算得到该菜单项的位置,以保证绘制操作在我们希望的区域中进行。 itemData 对于菜单项,该成员的取值为由CMenu::AppendMenu、CMenu::InsertMenu、CMenu::ModifyMenu等函数传递给菜单的值。 对于列表框或这组合框,该成员的取值为由ComboBox::AddString、CComboBox::InsertString、CListBox::AddString或者CListBox::InsertString等函数传递给控件的值。 如果ctlType 的取值是ODT_BUTTON或者ODT_STATIC,itemData的取值为0。 图5是个相应的例子,它修改了按钮的界面: 图8 利用WM_DRAWITEM消息美化界面 实现代码如下: BOOL CUi6Dlg::OnInitDialog() { //… //创建字体 //CFont CUi1View::m_Font m_Font.CreatePointFont(120, "Impact"); //… } void CUi6Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { if(nIDCtl == IDC_HELLO_CFAN) { //绘制按钮框架 UINT uStyle = DFCS_BUTTONPUSH; //是否按下去了? if (lpDrawItemStruct->itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED; CDC dc; dc.Attach(lpDrawItemStruct->hDC); dc.DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle); //输出文字 dc.SelectObject(&m_Font); dc.SetTextColor(RGB(0, 0, 255)); dc.SetBkMode(TRANSPARENT); CString sText; m_HelloCFan.GetWindowText(sText); dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText); //是否得到焦点 if(lpDrawItemStruct->itemState & ODS_FOCUS) { //画虚框 CRect rtFocus = lpDrawItemStruct->rcItem; rtFocus.DeflateRect(3, 3); dc.DrawFocusRect(&rtFocus); } return; } CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); } 别忘了标记Owner draw属性: 图9 指定按钮的Owner draw属性 值得一提的是,CWnd内部截获了WM_DRAWITEM、WM_MEASUREITEM等消息,并映射成子元素的相应虚函数的调用,如CButton::DrawItem()。所以,以上例子也可以通过派生出一个CButton的派生类,并重载该类的DrawItem()函数来实现。使用虚函数机制实现界面美化参见3.4章节。 3.3.5 WM_MEASUREITEM 仅仅WM_DRAWITEM还是不够的,对于一些特殊的控件,如ListBox,系统在发送WM_DRAWITEM消息前,还发送WM_MEASUREITEM消息,需要你设置ListBox中每个项目的高度。 WM_DRAWITEM的映射函数原型如下: afx_msg void OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct ); nIDCtl 该控件的ID,如果该元素为菜单,则nIDCtl为0 lpMeasureItemStruct指向MEASUREITEMSTRUCT结构对象的指针,MEASUREITEMSTRUCT的结构定义如下: typedef struct tagMEASUREITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemWidth; UINT itemHeight; DWORD itemData } MEASUREITEMSTRUCT; CtlType指定了控件的类型,其取值如表6所示: 类型值 含义 ODT_COMBOBOX 组合框控件 ODT_LISTBOX 列表框控件 ODT_MENU 菜单项 表6 CtlType的类型值与含义 CtlID 指定自绘控件的ID值,该成员不适用于菜单项 itemID表示菜单项ID,也可以表示可变高度的列表框或组合框中某项的索引值。该成员不适用于固定高度的列表框或组合框。 itemWidth 指定菜单项的宽度 itemHeight指定菜单项或者列表框中某项的的高度,最大值为255 itemData 对于菜单项,该成员的取值为由CMenu::AppendMenu、CMenu::InsertMenu、CMenu::ModifyMenu等函数传递给菜单的值。 对于列表框或这组合框,该成员的取值为由ComboBox::AddString、CComboBox::InsertString、CListBox::AddString或者CListBox::InsertString等函数传递给控件的值。 图示出了OnMeasureItem的效果: 图10 利用WM_MEASUREITEM消息美化界面 相应的OnMeasureItem()实现如下: void CUi7Dlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { if(nIDCtl == IDC_COLOR_PICKER) { //设定高度为 lpMeasureItemStruct->itemHeight = 30; return; } CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct); } 同样别忘了指定列表框的Owner draw属性: 图11 指定下拉框的Owner draw属性 3.3.6 NM_CUSTOMDRAW 大家也许熟悉WM_NOTIFY,控件通过WM_NOTIFY向父窗口发送消息。在WM_NOTIFY消息体中,部分控件会发送NM_CUSTOMDRAW告诉父窗口自己需要绘图。 可以反射NM_CUSTOMDRAW消息,如: ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) afx_msg void OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult); 参数: pNMHDR 说到底只是一个指针,大多数情况下它指向一个NMHDR结构对象,NMHDR结构如下: typedef struct tagNMHDR { HWND hwndFrom; UINT idFrom; UINT code; } NMHDR; 其中: hwndFrom 发送方控件的窗口句柄 idFrom 发送方控件的ID code 通知代码 对于某些控件来说,pNMHDR则会解释成其它内容更丰富的结构对象的指针,如:对于列表控件来说,pNMHDR常常指向一个NMCUSTOMDRAW对象,NMCUSTOMDRAW结构如下: typedef struct tagNMCUSTOMDRAWINFO { NMHDR hdr; DWORD dwDrawStage; HDC hdc; RECT rc; DWORD dwItemSpec; UINT uItemState; LPARAM lItemlParam; } NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW; hdr NMHDR对象 dwDrawStage 当前绘制状态,其取值如表7所示: 类型值 含义 CDDS_POSTERASE 擦除循环结束 CDDS_POSTPAINT 绘制循环结束 CDDS_PREERASE 准备开始擦除循环 CDDS_PREPAINT 准备开始绘制循环 CDDS_ITEM 指定dwItemSpec, uItemState, lItemlParam参数有效 CDDS_ITEMPOSTERASE 列表项擦除结束 CDDS_ITEMPOSTPAINT 列表项绘制结束 CDDS_ITEMPREERASE 准备开始列表项擦除 CDDS_ITEMPREPAINT 准备开始列表项绘制 CDDS_SUBITEM 指定列表子项 表7 dwDrawStage的类型值与含义 hdc指定了绘制操作所使用的设备环境。 rc指定了将被绘制的矩形区域。 dwItemSpec 列表项的索引 uItemState 当前列表项的状态,其取值如表8所示: 类型值 含义 CDIS_CHECKED 标记状态。 CDIS_DEFAULT 默认状态。 CDIS_DISABLED 禁止状态。 CDIS_FOCUS 焦点状态。 CDIS_GRAYED 灰化状态。 CDIS_SELECTED 选中状态。 CDIS_HOTLIGHT 热点状态。 CDIS_INDETERMINATE 不定状态。 CDIS_MARKED 标注状态。 表8 uItemState的类型值与含义 lItemlParam 当前列表项的绑定数据 pResult 指向状态值的指针,指定系统后续操作,依赖于dwDrawStage: 当dwDrawStage为CDDS_PREPAINT,pResult含义如表9所示: 类型值 含义 CDRF_DODEFAULT 默认操作,即系统在列表项绘制循环过程不再发送NM_CUSTOMDRAW。 CDRF_NOTIFYITEMDRAW 指定列表项绘制前后发送消息。 CDRF_NOTIFYPOSTERASE 列表项擦除结束时发送消息。 CDRF_NOTIFYPOSTPAINT 列表项绘制结束时发送消息。 表9 pResult的类型值与含义(一) 当dwDrawStage为CDDS_ITEMPREPAINT,pResult含义如表10所示: 类型值 含义 CDRF_NEWFONT 指定后续操作采用应用中指定的新字体。 CDRF_NOTIFYSUBITEMDRAW 列表子项绘制时发送消息。 CDRF_SKIPDEFAULT 系统不必再绘制该子项。 表10 pResult的类型值与含义(二) 以下是一个利用NM_CUSTOMDRAW消息绘制出的多色列表框的例子: 图12 利用NM_CUSTOMDRAW消息美化界面 对应代码如下: void CCoolList::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult) { //类型安全转换 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); *pResult = 0; //指定列表项绘制前后发送消息 if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { //奇数行 if(pLVCD->nmcd.dwItemSpec % 2) pLVCD->clrTextBk = RGB(255, 255, 128); //偶数行 else pLVCD->clrTextBk = RGB(128, 255, 255); //继续 *pResult = CDRF_DODEFAULT; } } 注意到上例采取了3.1所推荐的第2种实现方法,派生了一个新类CCoolList。 3.4 使用MFC类的虚函数机制 修改Windows界面,除了从Windows消息机制下功夫,也可以从MFC类下功夫,这应该得益于类的虚函数机制。为了防止诸如“面向对象技术”等术语在此泛滥,以下仅举一段代码作为例子: void CView::OnPaint() { // standard paint routine CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); } 这是MFC中viewcore.cpp中的源代码,很多读者总不明白OnDraw()和OnPaint()之间的关系,从以上的代码中很容易看出,CView的WM_PAINT消息响应函数OnPaint()会自动调用CView::OnDraw()。而作为开发者的用户,可以通过简单的OnDraw()的重载实现对WM_PAINT的处理。所以说,对MFC类的虚函数的重载是对消息机制的扩展。 以下列出了与界面美化相关的虚函数,参数说明略去: CButton::DrawItem CCheckListBox::DrawItem CComboBox::DrawItem CHeaderCtrl::DrawItem CListBox::DrawItem CMenu::DrawItem CStatusBar::DrawItem CStatusBarCtrl::DrawItem CTabCtrl::DrawItem virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); Owner draw元素自绘函数 很显然,位图菜单都是通过这个DrawItem画出来的。限于篇幅,在此不再附以例程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

princewwj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值