件中的定义方法为:
imecurm CURSOR mousem.cur
鼠标光标资源文件只有在定义之后,才能在应用程序中利用LoadCursor()函数调入内存使用,其调用方法为:
HCURSOR hCurm;//将鼠标光标资源文件数据调入内存
hCurm=LoadCursor(hInstance,"imecurm");
当需要动态改变鼠标光标形状的客户区域为整个窗口或某个子窗口的全部客户区域时,在注册客户应用程序窗口类时定义相应的鼠标光标资源句柄,当鼠标光标移到相应窗口内时立刻变成定制的光标形状,移出相应窗口时自动恢复原来光标形状。实现鼠标光标这一动态提示功能的定义方法如下:
wc.hCursor=hCurm;
当鼠标光标需要在窗口的特定客户命令按钮区域内或非特定客户命令区域内进行动态提示时,就不能使用上述定义方法,必须在窗口函数处理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 整个屏幕区域内显示描述被拖动窗口大小的线框,它的大小需要根据被拖动窗口的矩形区域大小和实际需要来具体
|