我想在代码执行一个大操作的时候把鼠标指标的形状变为沙漏。
=========================================================================================
最初的源代码如下:hCursor = LoadCursor( NULL, MAKEINTRESOURCE(IDC_WAIT) );
hCursor = SetCursor( hCursor );...
......SetCursor( hCursor ); // 恢复成箭头光标每一个函数调用都成功了,但是鼠标光标的形状却没有改变,我在 MSDN 中翻了一下:If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved. 似乎我如果不把窗口类结构中的光标句柄设为 NULL 的话,每当我移动鼠标,系统就会恢复鼠标的形状。
========================================================================================
然后我就把代码作了如下修改:// Changing cursor shape.
hOldCursor = (HCURSOR) GetClassLong( hwnd, (int) GCL_HCURSOR );
uRet = SetClassLong( hwnd, (int) GCL_HCURSOR, (LONG) NULL );
hCursor = LoadCursor( NULL, MAKEINTRESOURCE(IDC_WAIT) );
hCursor = SetCursor( hCursor );...
......// Resotre curosr shape
SetClassLong( hwnd, GCL_HCURSOR, (LONG) hOldCursor );
SetCursor( hOldCursor );可是,即使做了这样的修改后,代码也不能改变光标形状。我要怎么做才能把光标变成一个沙漏形状,并在操作执行完后将它恢复成箭头形状呢?

解决方案 »

  1.   

    你用什么写的sdk,mfc看你的描述,应该是在你设置光标后,默认的窗口过程又把它修改回去了。
      

  2.   

    hCursor = LoadCursor( NULL, MAKEINTRESOURCE(IDC_WAIT) );
    这句好像有问题吧~~~
    NULL应该指定LoadCursor (hInstance, szCursor);
      

  3.   

    hOldCursor = (HCURSOR) GetClassLong( hwnd, (int) GCL_HCURSOR );
    uRet = SetClassLong( hwnd, (int) GCL_HCURSOR, (LONG) NULL );
    hCursor = LoadCursor( NULL, MAKEINTRESOURCE(IDC_WAIT) );
    hCursor = SetCursor( hCursor );
    你的代码放在上面地方啊~~
    是不是放在消息case语句里面还是int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)里面阿??
      

  4.   

    到 WM_SETCURSOR 里面SETCURSOR(), 或者,CWND类里面有个 BEGINWAITCURSOR...这样的函数。
      

  5.   

    很有可能你原来的窗口在MOUSEMOVE里把鼠标又设置回去了。如果其他方法都不行的话,你可以这样做:拦截SETCURSOR的导入函数,然后在拦截后的函数里用LoadCursor(NULL, IDC_WAIT)应该就没问题了。我以前挂接目标程序的时候也遇到过这方面的问题,就是这么解决的!
      

  6.   

    是不是被view给挡掉了?在view中设置看看
      

  7.   

    程序在逻辑上出现了错误,光标形状没改变不关 SetCursor() 的事。第二个版本的代码是改变光标形状的正确代码!谢谢各位网友的热心帮助!