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

posted @ 2009-12-22 13:38  eric_lgf  阅读(739)  评论(0编辑  收藏  举报