在Windows应用程序中动态控制鼠标光标 在Windows下的客户应用程序中，如果能够实现动态改变不同区域内鼠标光标的外观形状，不仅可以使应用程序动感美观，还能起到操作向导作用。这里将介绍处理动态鼠标光标的一些编程技术和基本方法。 一、建立自己的鼠标光标资源 正常情况下的Windows鼠标光标形状为向左上角的单箭头符号，根据应用程序不同客户区域的需要，用户可以自己设置几种鼠标光标形状，常见的有手形、不同方面的箭头、立体箭头和笔式等。中文 Windows 95下的鼠标光标形状比较丰富，在“＼Windows＼CURSORS”目录下存放，此外，用户完全可以利用Windows下的中文SDK3．1、VFP 3．0和DELPHI2．0中的“Image Editor”等资源编辑器创建自己的鼠标光标资源文件．CUR。
二、鼠标光标资源的定义与调用
建立起自己的鼠标光标资源文件后，需要先在应用程序的资源文件中定义，假设鼠标光标资源文件名为MOUSE．CUR和MOUSEM．CUR，在资源文件中的定义方法如下：
imecurh CURSOR mouse．cur
imecurm CURSOR mousem.ur
然后在应用程序中利用toadCursor（）函数凋人内存后才能作用，其调用方法如下：
HCURSOR hCurh；//定义鼠标资源句柄
HCURSOR HCurm；//将鼠标光标数据调人内存
hCurh=LoadCursor（hInstance，“imecurh”）；
hCurm＝LoadCursor（hInstance，“imecurm”）；
三、动态鼠标光标的全局注册方法
如果要鼠标光标移动到客户应用程序的窗口内后，立刻变成定制的形状，只需在注册客户应用程序窗口类时定义相应的鼠标光标资源即句柄。一般定义方法如下：
we．hCursor=LoadCursor（NULL，IDC-ARROW）；
但要在窗口内将鼠标光标变成特定的形状，必须用下述方法定义光标句柄，然后注册窗口类：
WC．hCursor=hCurh；
这样定制的全局性鼠标光标具有如下特点：只要鼠标光标移入该客户应用程序的窗口内，光标形状立刻变成定制的形状，鼠标光标移动平滑快速，无抖动等不良现象。
四、特定客户区域内的动态鼠标光标的实现
我们以 UCWin 3.1下的特殊符号软键盘为例：当鼠标光标移动到软键盘窗口内的按键位置时光标形状为手形，当移动到非按键位置时光标为上下左右四个方向的箭头形状。要实现这种功能，应按如下操作步骤编制：
首先将手形光标按上述方法设置为全局性的动态鼠标光标：we．hCursor＝hCurh；
然后注册相应窗口的窗口类，在该窗口函数中对WM_MOUSEMOVE消息进行如下处理：
1．获取鼠标光标的屏幕位置；
2．如果鼠标光标在特定区域内，则设置相应光标形状和标志；
3．如果鼠标光标移出特定位置则清除标志并恢复原来光标形状；
POINT pr；
RECT rt；
BOOL iFlag；
case WM_MOUSEMOVE：
pt=MAKEPOINT（1Param）；／／光标位置
if（PtInRect（＆rt，pt))｛//在特定区域设置
iFlag＝TRUE；鼠标光标
SetCursor（hCurm）；
｝else if（iFlag==TRUE）{
iFlag＝FALSE；
SetCursor（hCurh）；｝break；
这种动态鼠标光标虽然有略微的抖动，但由于一般情况下的特定客户区域都比较小，所以这种现象也并不明显，完全可以满足需要。如果存在多个特定区域需要不同形状的鼠标光标，只需建立多个用户光标资源文件，并进行多个特定区域判断即可，有兴趣的读者可以自行扩充。
（杜蕴杰）