设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> Visual C++ >> WINDOWS高级窗口的客户区域拖动技术及其应用
精品推荐
Visual C++点击TOP10
·用WINSOCK实现聊天室的VC++程序设计
·利用mfc编写activex控件
·用vc实现生产者消费者问题
·DirectX8.0
·C/C++ 大量经典编程书籍下载
·VC快捷键大全
·CreateFileMapping的MSDN翻译和使用心得
·Windows环境下的麦克风录音系统
·挂钩Windows API
·如何开发OPC Server
编程开发点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·ASP.NET 程序中常用的三十三种代码
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

WINDOWS高级窗口的客户区域拖动技术及其应用

作者: 来源:网络文章 时间:2005-12-13 18:42:44

WINDOWS高级窗口的客户区域拖动技术及其应用(1)

WINDOWS应用程序窗口一般包括两种:普通窗口和常居顶层的无标题条高级窗口。前者是由WINDOWS内部功能定制的,它具有WINDOWS应用程序窗口的所有普通特性:具有标题条、窗口边框、最大化按钮、最小化按钮和系统默认的快捷键及鼠标支持功能等,利用鼠标左键拖动该种窗口的标题条可以在屏幕上任意移动窗口,当鼠标光标停在窗口边框上时可以改变窗口大小;后者是一种定制的高级窗口,它不具有普通窗口的任何属性,整个窗口的控制必须由编程者来一一确定,使用这种窗口的典型实例有WINDOWS中的IME输入法应用程序、UCWIN4.0平台、各种浮动工具箱、OFFICE中的桌面工具栏和第三方开发的汉字输入平台等。

WINDOWS 这种无标题条常居顶层高级窗口的一个显著特点是,不需改变窗口大小但必须具有窗口的客户区域拖动功能。由于普通窗口的拖动功能是由系统来完成的,编制普通的应用程序根据无须考虑客户区域拖动问题,因此一般编程人员很难遇到这个问题,更谈不上如何实现这一功能了。开发者往往希望自己开发出来的软件具有经典软件中的窗口客户区域拖动功能,笔者曾经利用模仿系统鼠标点击标题条拖动窗口和WINDOWS系统内部提供的API发送函数发送内部拖动命令来实现无标题常居顶层高级窗口的客户拖动功能,结果都不理想。后来只好在窗口函数中通过直接处理WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_LBUTTONUP消息,自行控制窗口拖动的客户命令区、拖动开始、窗口移动、拖动虚框绘制、虚框移动和拖动结束等过程,来实现高级顶层窗口的客户区域拖动方案。下面就自己实践经验详细介绍实现该方案的具体方法和主要技巧。

一、WINDOWS检测客户拖动命令及鼠标光标动态提示的实现方法

WINDOWS 无标题条常居顶层高级窗口的客户区域一般分为两种:特定客户命令区域和非特定客户命令区域。特定客户命令区域是指利用"RECT"定义的特定子矩形区域,窗口函数对发生在该区域内的鼠标命令进行检测并处理;非特定客户命令区域是指没有明确定义的窗口客户区域部分,即所有特定客户命令区域之外的部分,窗口函数根据实际需要来确定是否对该区域内发生的鼠标命令进行处理。实现常居顶层高级窗口拖动功能的首要问题,是如何检测和处理特定客户命令区域和非特定客户命令区域内的鼠标命令,以及如何利用鼠标光标来动态提示用户此时可以进行窗口的拖动操作。

1、在特定客户区域检测鼠标命令的方法

当窗口中设置了实现拖动功能的图标命令按钮时,就必须在资源文件中定义命令按钮的特定客户区域,该区域一般也就是显示命令按钮中图标的矩形区域,这个区域的定义方法为"RECT DragRT",其中DragRT为定义的检测鼠标命令矩形区域,它用DragRT.LEFT、DragRT.TOP、DragRT.RIGHT和DragRT.BOTTOM四个参数来描述矩形区域相对于窗口客户区域左上角的相对坐标值,这四个参数必须事先定义具体的数值,也可以利用"SETRECT"函数直接填充。

窗口函数在处理鼠标消息WM_LBUTTONDOWN时,在接收系统传递的鼠标位置参数lParam后,通过MAKEPOINT( )函数将其转换为窗口坐标值,利用判断某坐标点是否位于特定矩形区域内的函数PtInRect(),就可以判断鼠标指针是否点击在拖动命令按钮之内,从而完成窗口拖动功能的启动任务。其描述性功能代码示例如下:

case WM_LBUTTONDOWN://鼠标光标点击处理

POINT pt;//鼠标在屏幕上位置指针,包括pt.X和pt.Y两个参数,

//该指针值利用MAKEPOINT通过lParam参数转换而来

pt=MAKEPOINT(lParam); //获取鼠标当前屏幕位置指针

if(PtInRect(&DragRT,pt)){//判断鼠标是否点击在拖动按钮内

//实现鼠标拖动窗口方案的启动功能

} else {

//进行其它特定或非特定命令客户区域判断处理

}

break;

共6页 9 7 [1] [2] [3] [4] [5] [68 :>

WINDOWS高级窗口的客户区域拖动技术及其应用 相关文章:
WINDOWS高级窗口的客户区域拖动技术及其应用 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com