文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C++Builder在bcb里实现像Winamp那样具有吸附效果的磁性窗口
精品推荐
特别推荐
·菜鸟入门 认识C#中的委托和事件
·WINDOWS下的动态鼠标光标控制
热点TOP10
·在 C++ Builder中利用串行通信控件编程
·用Builder C++设计串行口COM1或COM2的读写操作
·Windows多线程间同步事件的控制方法
·用WinSock控件编写网络聊天器
·在C++ Builder中进行DirectX编程(2)
·C++ Builder VCL库函数简介
·用C++ Builder3 制作记事本
·利用C++ Builder 5.0创建用户自己的网上聊天程序
·C++ Builder 中的自画功能
·C++Builder IDE使用技巧与快捷键
·C++ Builder下数据库报表Master/Detail关系功能的实现
·WINDOWS下的动态鼠标光标控制
·菜鸟入门 认识C#中的委托和事件
·QuickReport基本知识
·C++BUILDER中一些实现界面效果的技巧
·C#动态生成树型结构的Web程序设计
·利用C++ Builder开发动画DLL
·BCB中实现全屏幕OpenGL
·C++Builder注册表编程实例详解
·利用C++Builder遍历文件目录

在bcb里实现像Winamp那样具有吸附效果的磁性窗口

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]



       相信大家都用过Winamp,一定会对她那种具有吸附效果的窗口感到很惊喜吧。其实要实现这样的效果并不难,下面我就用bcb做出这样的效果。为了将问题简化,窗口只在屏幕顶端产生吸附效果。

       打开bcb6.0,新建一工程,将Form1的BorderStyle的属性改为bsNone,做成一个无标题栏,无边框的窗体。正常情况下,我们是无法移动这样的窗体的。我们必须自己给窗口发送一个移动的消息,在Form1的MouseDown的事件中添加如下代码:

        ReleaseCapture();

        SendMessage(this->Handle,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);

        其实道理很简单,相信大家都会这个,我也就不多说了,:)

        为了窗口在接近屏幕顶端的时候有一种磁性效果,我们必须在窗口的移动之前做一个判断,判断窗口将要到达的新位置的Top值是否小于一定范围(这个范围我称之为磁性距离,大小可由自己定义,为方便起见,我在这里定为20)。但是bcb里面并没有窗体移动事件,我们必须自己在程序里面拦截窗体移动消息,为此,我们要重载WndProc这个函数:

void __fastcall TForm1::WndProc(TMessage& Message)
{
        switch(Message.Msg)
        {
                /*在窗口移动之前,判断窗口新位置的Top值是不是在磁性范
                围内,如果在,让它归0,表示不产生窗体移动,避免在磁性
                范围内移动窗口的时候窗口过于闪烁*/
                case WM_WINDOWPOSCHANGING:
                        if ((LPWINDOWPOS(Message.LParam))->y<20)
                                (LPWINDOWPOS(Message.LParam))->y=0;
                        break;
                default:
                        break;
        }
        TForm::WndProc(Message);  //自己处理完消息后再让系统做剩下的事情
}
        OK,代码就这么多,是不是很简单?运行一下程序,看是不是果真如此呢?:)

       也许有人会问为什么不是拦截WM_MOVE这个消息,其实只要你试一下就知道了,如果拦截这个消息,窗口在磁性范围内移动的时候会很闪烁。原因很简单,WM_WINDOWPOSCHANGING是在窗口移动之前就做出了判断,如果窗口将要在磁性范围内移动(此时尚未移动),则不让窗口移动。而WM_MOVE在窗口移动以后才做判断,这样的结果就是不断让Top复位成0,当然会造成窗口闪烁了。

        另外,大家都知道,根据系统本身的设置不同,窗口在移动的过程中,有两种显示效果,一种是显示虚线框,一种是显示窗口内容。细心的朋友可能已经发现,在Winamp中,不管系统的设置是如何,移动Winamp的窗口的过程中总是会显示窗口内容。其实这样做的道理很简单,因为在显示虚线框的时候,磁性窗口的吸附效果不怎么好,大家可以亲手试试。

        那如何也做成和Winamp一样呢?其实只要一个API函数就搞定了,:),代码如下:

SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,SPIF_SENDCHANGE);

        在窗口移动之前,通过调用上面的函数,就能达到Winamp一样的效果了。关于SystemParametersInfo这个函数及参数的具体用法,请各位参见MSDN,再没有比MSDN解释的更清楚了。

        以上代码在Win2k Professional+bcb6.0下测试通过。


[1] [2] 下一页 




上一篇:在BCB下使用GExperts的Debug功能

下一篇:C++Builder注册表编程实例详解

在bcb里实现像Winamp那样具有吸附效果的磁性窗口 相关文章:
·香港三级片明星,并不像你们想的那样
·3DS Max 7卧室效果图设计:建模篇
·3DMax:跟我学做房间效果图
·QQ空间流星雨效果代码
·Flash 图片轮换效果
·Photoshop实例:调出漂亮MM的唯美效果
·Flash如何制作灯光效果
·弹出窗口代码集萃
·3DS MAX图文教程:事件驱动粒子系统——喷泉效果
·书本翻页效果
在bcb里实现像Winamp那样具有吸附效果的磁性窗口 相关软件:
·《劲舞团》窗口化补丁
·SRS Audio Sandbox(声卡效果增强软件) V1.6.7.
·Winamp V5.52.1800 简体中文精简版
·3ds max效果图制作入门必读
·WinampV5.52.1800 简体中文增强版
·Photoshop图象合成经典实例 压缩版和1.40G的效果一样
·WINAMP架个人电台
·选项卡效果
·窗口键盘记录器(keylog) V1.0
·检验音箱效果的MP3歌曲

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot