win32程序使用硬件光标
游戏中修改光标样式的做法有两种:
1、ShowCursor(false);来隐藏光标(这个函数详情见msdn,没有想象中的简单),然后根据光标位置绘制位图
该做法的缺点在于:如果程序在处理后台逻辑时,发生了异常导致的客户端无法渲染出足够的帧数,则光标的移动会异常困难
解决的方法为下面的方法
2、使用硬件光标:即用::LoadCursorFromFile与::SetCursor来设置不同状态的光标
需要注意的是:LoadCursorFromFile只支持.CUR与.ANI文件,前者为静态光标,后者为动态光标。该文件的生成可用 ArtCursors工具来完成
当程序在注册窗口类时会有一个hCursor的结构字段需要填充,这个字段的光标成为class cursor,当用户在程序中::SetCursor后,每次当光标
移动,windows会自动redraw class cursor,所以简单的::SetCursor会没有任何效果。为此,您还需要响应WM_SETCURSOR消息,在该消息
到来时再::SetCursor。The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window
and mouse input is not captured. 即在mouse input之前 mouse move之后会发出WM_SETCURSOR消息,此时正是DefWindowProc redraw class cursor
的时候。
最后别忘记释放资源,::DestroyCursor