VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Windows没有正确重画窗口滚动条

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

前几天在写一个看图的小程序时无意中发现Windows窗口系统的一个小缺陷。我们知道当一个Windows窗口的位置改变、大小改变、被别的窗口覆盖的部分重新可见时,该windows程序必须负责重新绘制窗口无效部分的内容。一般情况下,程序员只需负责窗口客户区的部分的重画工作,窗口边框、滚动条、状态栏等非客户区部分由Windows系统负责重画。让我觉得惊讶的是,在处理滚动条时,windows却没能正确的重画。当一个窗口同时出现水平滚动条和垂直滚动条时,windows没有正确重画两滚动条交叉的部分(通常在一个窗口或子窗口的最右下角)。要观察这个现象很简单:随便打开一个windows窗口程序,改变窗口大小使其同时出现水平和垂直滚动条,然后上下拖动窗口,使窗口下半部分被任务栏遮挡然后又重新显示;或者随便拖动一个窗口经过目标窗口的右下角部分,你都可以观察到两滚动条交叉的那个小矩形区域没有正确重画。

  下面图一中的红色矩形指出了Windows没有正确重画的区域。

                              <图一>

下面图二中显示的是正常的绘制(文件管理器):

                                    <图二>

下面是文件管理器中没有正确重画的例子(拖动窗口被状态栏覆盖,然后再拖上来),请注意圈注部分:

                                            

                                          <图三>

下面是Windows自带的画图板中不正确重画的例子(拖动一个窗口从其上经过):

                                <图四>

大家可以亲自去试试的,Windows Media Player,NotePad,具有双滚动条的Win32窗口程序等等都有这个问题。我用的OS是Windows XP和Windows 2003 Server,经试验,两个系统平台上都有这个问题。如果要在Windows 2003 Server上观察这个问题,你应该先把 Windows Theme服务打开,然后在Performance options中的Visual Effects中选择Adjust for best appearance,让Windows调整为最佳外观。在Windows XP中这是默认的设置,不用进行任何的设置。

由于自己和周围的人都没有装有Windows 2000、Windows 9X系统,所以没有去试有没有上面说到的问题。希望有装这些系统的朋友试一试,顺便告知一下结果,在此先谢过了:-)




相关文章

相关软件