Windows自动显示类光标(与光标所指向的窗口相关联的光标)。注册窗口类时可以分配类游标。以下示例通过为【wc】参数标识的WNDCLASS结构的HCURSORpt成员分配光标句柄来说明这一点。
WNDCLASS wc;
//填写窗口类结构的参数
//描述主窗口。
wc.style = NULL; //类风格
wc.lpfnWndProc = (WNDPROC) MainWndProc; //窗口过程
wc.cbClsExtra = 0; //不需要每个额外的数据
wc.cbWndExtra = 0; //没有每窗口额外的数据
wc.hInstance = hinst; //拥有该类的应用程序
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //类图标
wc.hCursor = LoadCursor(hinst, MAKEINTRESOURCE(230)); //类游标
wc.hbrBackground = GetStockObject(WHITE_BRUSH); //类背景
wc.lpszMenuName = "GenericMenu"; //类菜单
wc.lpszClassName = "GenericWClass" // 班级名称
//注册窗口类。
return RegisterClass(&wc);
当窗口类被注册时,应用程序的资源定义文件中由230标识的游标将是基于该类的所有窗口的默认游标。
您的应用程序可以使用SetCursor功能并指定不同的光标句柄来更改游标的设计。但是,当光标移动时,Windows会在新位置重新绘制类光标。为防止重新绘制类光标,您必须处理WM_SETCURSOR消息。每次光标移动,鼠标输入未被捕获时,Windows会将此消息发送到光标移动的窗口。
处理WM_SETCURSOR时,可以为不同的条件指定不同的游标。例如,以下示例显示了每当光标移动到最小化应用程序的图标上时,如何显示【hCurs3】光标。
case WM_SETCURSOR:
//如果窗口最小化,绘制hC??urs3游标。
//如果窗口没有最小化,则绘制默认值
// cursor(类cursor)。
if(IsIconic(hwnd))
{
SetCursor(hCurs3);
break;
}
当窗口不被最小化时,Windows显示类游标。
您可以使用SetClassLong功能替换类游标。此函数更改给定类的所有窗口的默认窗口设置。以下示例使用【hCurs2】光标替换现有的类游标。
//更改由hwnd表示的窗口类的游标。
SetClassLong(hwnd, //窗口句柄
GCL_HCURSOR, //更改光标
(LONG) hCurs2); //新光标