我想做一个程序,当我的程序运行的时候,不管鼠标移动到桌面上任何窗口上,或则桌面上,显示的鼠标光标都是我自定义的鼠标光标,当程序退出的时候,鼠标恢复为原来的形状

解决方案 »

  1.   

    你程序运行的时候,通过SetCapture把鼠标事件抓到你的主窗口中,然后在退出的时候调用ReleaseCapture()释放;
    不过这样做太霸道了,你的程序运行时间,别的程序都无法响应鼠标事件
      

  2.   

    SetSystemCapture()hehe  绝世高手你就只给他30分?? 呵呵  玩笑.
      飘过.......
      

  3.   


    用SetSystemCapture()函数就可以了你如果要想一直显示   可以尝试下ShowWindow()函数.两个结合到用试下.
      

  4.   

    你们讲的方法我试过了SetCapture是不行的,光标移出窗口后就无效了,至于SetSystemCapture我压根在MSDN中没有查到这个函数取GOOGLE上找也没有,我写了个钩子来屏蔽WM_SETCURSOR,但是不知道为什么屏蔽不了,麻烦各位看看
    HHOOK      glhHook      = NULL;       // °²×°µÄÊó±ê¹³×Ó¾ä±ú
    HINSTANCE  glhInstance  = NULL;   
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
    glhInstance = (HINSTANCE) hModule;
        
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
        return TRUE;
    }////////////////////////////////////////////////////////////////////////////////////
    LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    BOOL fEatKeystroke = FALSE;

    // MSG   *pMsg   =   (MSG*)lParam;   
    CWPSTRUCT *pMsg =(CWPSTRUCT*)lParam;
    if (nCode >= 0) 
    {


    switch (pMsg->message) 
    {
    case WM_SETCURSOR:
        
     //  MessageBox(NULL,"1111","111",MB_OK);
    fEatKeystroke=true;
        
    break;

    default:
    fEatKeystroke=false;
    break;
    }
    }  return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
    }void   StartMsgHook()
    { glhHook = SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc ,glhInstance,0);
    }void  StopMsgHook()
    {
    // Ð¶Ôع³×Ó
    if (glhHook!=NULL)
    UnhookWindowsHookEx(glhHook);}
      

  5.   

    高手些,难道没有想过其它的窗口中不一定是使用的系统的光标,所以楼上的用SetSystemCursor是不行的