一. 简介
似乎越来越多的软件开始喜欢使用弹出窗体来通知用户一些信息,比如
QQ
的系统消息、迅雷的下载完毕的通知、
MSN
的邮件通知等。弹出窗口自动呈现和消失,并且不会干扰到用户的当前工作(不获得系统焦点),确实是一种友好的交互方式。
本系统是为
Microsoft Visual Studio
开发的一套弹出式窗体的模板,通过此模板,用户可以在自己的应用程序中轻松建立弹出式窗口。系统实现了窗口的弹出、回落、渐隐和渐现等效果,并且支持不规则窗体的建立(需要系统支持),窗体行为的具体参数(如弹出速度、停留时间等)均可以设置。随此模板还附带了一个“
PopUpWindow
辅助工具”,通过它您可以设置并预览弹出式窗体的效果,还可以直接拿到相应效果下窗体调用的代码。
(此窗体模板可直接使用到Microsoft Visual Studio 2008,下载包里包括了本说明文档。点此下载)
二. 模板使用说明
1. 运行环境要求
本模板在
Windows7
系统下基于
Microsoft .NET Framework 3.5
开发,在
Microsoft Visual Studio 2008
下测试通过。
此外,测试过程中发现,对于低于
Windows Vista Home Premium
版本的
Windows
系统,以及关闭
Aero
桌面特效后的
Windows Vista / 7
,无法正常呈现不规则窗体效果。
2. 模板的安装
文件“
PopUpWindow.zip
”不要解压,将其复制到类似如下形式的路径下:
C:/Users/
你的用户名
/Documents/Visual Studio 2008/My Exported Templates
如果“
My Exported Templates
”目录不存在则可以手工建立。
3. 模板的使用
通过如下一个测试工程我来说明此模板的使用方法。
1)
启动
Microsoft Visual Studio 2008
,新建一个“
Windows
窗体应用程序”项目,在出现的窗体中你可以拖入一个按钮,用来触发弹出式窗体,如图
1
所示。

图 1 用于触发弹出式窗体的按钮
2)
在“解决方案资源管理器”中的项目名上右键单击,依次选择“添加”
→“
新建项”,此时如果你之前的模板导入正确的话,
Visual Studio
应该能识别到刚刚导入的自定义项模板,如图
2
所示:

图 2 通过用户模板建立窗口
3)
确定后便向工程中添加了一个弹出式窗口,你可以根据自己需要,在窗口中添加任意的控件。注意该窗口的控制栏已经被关闭了,如果你需要,也可以开启它。如果给窗体添加了背景图,记得根据图片大小调整窗体尺寸,否则窗体弹出时将只能看到默认的
200
×
200 pixel2
大小的区域。
4)
此后便可以给刚才第一个窗体的那个按钮添加点击事件的响应代码了,这里你可以利用“
PopUpWindow
辅助工具”先来预览弹出窗体的执行效果,调整好各种参数后再将工具生成的调用代码拷贝到你的测试工程中(作为那个按钮的点击事件响应代码)并作相应调整即可。
三. “PopUpWindow辅助工具”使用说明
软件运行界面如下图所示:

图 3“PopUpWindow 辅助工具”运行界面
如上图所示,你可以定制弹出式窗口的弹出方式、消失方式、最终窗体的不透明度、窗体现
/
隐速度等,分别说明如下:
1)
窗体出现方式
:即是指窗体出现的方式,“无动作”即表示直接呈现;“弹出”和“渐现”的效果也顾名思义即可知;需要说明的是“弹出”和“渐现”允许复选,效果也将叠加。
2)
窗体消失方式
:类似“窗体出现方式”的设置了,需要注意的是如果选择“无动作”,则窗体在弹出后不会自动关闭,需要程序开发人员自己添加关闭按钮。
3)
是否允许拖动窗体
:此选项如果选择“允许”,则弹出窗口可以被用户拖动到屏幕上的任意位置,否则窗口将静止在
Windows
任务栏通知区域上方。
4)
窗体不透明度
:此项决定窗体完全呈现时的不透明度。
5)
窗体现/
隐速度
:此项决定窗体弹出、消失或者显隐的速度。
6)
窗体停留时间
:此项决定窗体在完全呈现后到开始消失之前的停留时间。
点击“演示窗体”即可看到刚才参数设置下的弹出窗体的运行效果,此时在屏幕右下角
Windows
任务栏通知区域可看到一个带有“
HHTecShare
”字样的演示窗体,如图
4
所示。这是一个形状不规则的窗体,注意该效果并不是在所有系统上都能正确呈现的。

图 4 演示窗体
此时还可以看到,在辅助工具上的文本框内生成了按照当前设置效果下弹出式窗口的调用代码,你可以点击“复制代码”按钮将其复制到系统剪贴板。

图 5 “PopUpWindow辅助工具”生成的代码
(注:上述生成的示例代码中的类名“
PopUpWindow
”可能需要根据实际建立该弹出式窗口时的设置更改。)
四. 其他说明
1.
本弹出式窗体设置了当用户鼠标移入窗体时,窗体不论是处于弹出
/
渐现阶段还是在回落
/
渐隐阶段,都将以窗体停留时的最终呈现状态显示,以便用户阅读弹出窗体上的信息。
2.
如果在窗体内添加了比较多或者面积比较大的其他控件,建议您给这些控件添加鼠标移入和鼠标移出的事件响应,并分别在二者的响应代码中调用“
windowHalt()
”方法和“
windowResume()
”方法,以使鼠标在移动到这些控件上时,弹窗也能保持自身行为正确。对于此问题笔者或许会在此弹窗模板的后续版本中尝试改进,也希望朋友们不吝赐教。
3.
此弹窗模板的设计实现大量参考了窦瑞欣先生(女士)个人空间(
http://space.itpub.net/14325734/
)内的相关博文,在此特别表示感谢。