绝世高手请进:解决窗口外光标的设置 我想做一个程序,当我的程序运行的时候,不管鼠标移动到桌面上任何窗口上,或则桌面上,显示的鼠标光标都是我自定义的鼠标光标,当程序退出的时候,鼠标恢复为原来的形状 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你程序运行的时候,通过SetCapture把鼠标事件抓到你的主窗口中,然后在退出的时候调用ReleaseCapture()释放;不过这样做太霸道了,你的程序运行时间,别的程序都无法响应鼠标事件 SetSystemCapture()hehe 绝世高手你就只给他30分?? 呵呵 玩笑. 飘过....... 用SetSystemCapture()函数就可以了你如果要想一直显示 可以尝试下ShowWindow()函数.两个结合到用试下. 你们讲的方法我试过了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);} 高手些,难道没有想过其它的窗口中不一定是使用的系统的光标,所以楼上的用SetSystemCursor是不行的 DLL中调用DLL的问题 通过按钮输入数据 内外网访问问题 如何隐藏CFormView 上的光标 VC新手,请大家帮忙提供一个MSDN2000的下载地址! 要想让对话框中的一个CEdit控件获得输入高亮点,改用哪个成员函数? WinSock的问题。帮忙看一下。要死了 关于生成bmp文件? ggjjddmm们,来帮帮忙!我很急得!在线等待!!100分送上! 怎样把双字节的字符串转化成单字节的字符串? 关于为了避免闪烁在内存中绘图的疑问 大侠,请问vc如何读取window当前登录的域用户,及怎样进行域用户身份验证? 急急急
不过这样做太霸道了,你的程序运行时间,别的程序都无法响应鼠标事件
飘过.......
用SetSystemCapture()函数就可以了你如果要想一直显示 可以尝试下ShowWindow()函数.两个结合到用试下.
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);}