设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 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高级窗口的客户区域拖动技术及其应用(3)
当鼠标光标需要在窗口的特定客户命令按钮区域内或非特定客户命令区域内进行动态提示时,就不能使用上述定义方法,必须在窗口函数处理WM_MOUSEMOVE消息时进行特殊处理:首先判断鼠标光标指针当前位置是否在拖动命令按钮或非特定客户区域内移动,如果鼠标指针位置满足拖动窗口功能区域的要求,则利用API函数SETCURSOR()改变鼠标光标图案,提示用户此时可以进行窗口拖动操作,并将鼠标输入控制权交给当前窗口,同时设置改变鼠标光标标志;当鼠标指针移出拖动窗口启动命令区域时,恢复原来鼠标光标图案同时释放鼠标输入焦点控制权,并清除鼠标光标动态提示标志单元。其功能性代码描述如下:

BOOL DragFlag; //动态提示光标标志

case WM_MOUSEMOVE: //鼠标光标移动处理

pt=MAKEPOINT(lParam); //鼠标光标当前位置指针

if(PtInRect(&DragRT,pt)){//鼠标指针在拖动命令区域内则

SetCursor(hCurm); //动态改变鼠标光标形状

SetCapture(hWnd); //将鼠标输入控制权交当前窗口

iFlag=TRUE; //设置鼠标光标形状改变标志

} else if(iFlag==TRUE){ //鼠标指针未在拖动命令区域内

SetCursor(LoadCursor(NULL,IDC_ARROW));//恢复原形状

ReleaseCapture() //释放鼠标输入控制权

iFlag=FALSE; //恢复鼠标光标形状改变标志

}

break;

二、WINDOWS高级窗口拖动方案中拖动框的客户定制方法

以上介绍了窗口拖动前鼠标光标位置检测及客户命令区域内拖动功能的鼠标光标动态提示方法,当用户通过鼠标光标动态提示功能取得满足拖动窗口条件时,通过点击鼠标左键来启动拖动方案,这时最关键的技术问题是鼠标拖动窗口移动过程中的拖动框显示与擦除功能实现。窗口拖动虚框就是在WINDOWS 整个屏幕区域内显示描述被拖动窗口大小的线框,它的大小需要根据被拖动窗口的矩形区域大小和实际需要来具体确定,一般情况下为被拖动窗口的矩形区域大小。

WINDOWS 系统中的绘图方法是通过显示设备描述表实现的,绘图操作需要占用一定的GDI 资源,系统为窗口、菜单、对话框、字体和各种绘图函数分配足够的GDI资源,WINDOWS 95中的GDI资源要比WINDOWS3.X中的GDI资源大得多。WINDOWS中有两种使用显示设备描述符表的方法:更新窗口显示客户区域和直接操作窗口显示客户区域。更新窗口显示客户区域是直接针对应用程序窗口矩形区域而言的,在窗口函数响应WM_PAINT消息时利用图形操作命令进行窗口更新处理:

InvalidateRect(hWnd,&WinRECT,TRUE);//WinRECT为要更新区域

UpdateWindow(hWnd);

窗口初始建立时默认更新窗口的全部区域,当要更新的矩形区域为NULL时表示更新窗口所有矩形区域。函数UpdateWindow()通知系统向要更新矩形区域的窗口发送WM_PAINT消息,窗口函数接收到WM_PAINT消息后首先利用BeginPaint()函数取得设备描述符表,然后利用图形命令直接对显示设备进行更新操作,最后利用EndPaint()函数通知系统更新操作结束。其描述性功能代码如下:

case WM_PAINT:

PAINTSTRUCT ps;

hdc=BeginPaint(hWnd,&ps);//取得设备描述符表

SetBkMode(hdc,OPAQUE); //设备更新方式

SetBkColor(hdc,0x00c0c0c0);

//更新矩形区域内图形操作

EndPaint(hWnd,&ps); //结束更新操作

break;

更新窗口矩形区域直接使用窗口类中定义的屏幕画刷,即使利用SelectObject()函数选择相应屏幕画刷也无效,而且更新矩形区域范围是通过InvalidateRect()函数累加的,由UpdateWindow()函数通知系统开始进行窗口更新操作,整个过程是由系统来调度的,因此使用这种方法无法实现窗口的拖动虚框绘制和实时操作。

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

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