社区
图形处理/算法
帖子详情
光标、光标、光标、光标、光标、光标、光标、
yierham
2007-08-21 06:01:27
用SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);
改变系统的光标后如何将它再设置回来
...全文
498
20
打赏
收藏
光标、光标、光标、光标、光标、光标、光标、
用SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL); 改变系统的光标后如何将它再设置回来
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yierham
2007-08-30
打赏
举报
回复
恩,实现不了的用这个钩子可以实现,但是在有一些窗口上就修改不了,鼠标移动的话可以修改成我自定义的光标,如果鼠标不移动了,光标又变成其它窗口下的光标了
#include <windows.h>
#include "resource.h"
#pragma data_seg("shareddata")
HHOOK glhHook = NULL; // 安装的鼠标钩子句柄
#pragma data_seg()
#pragma comment(linker,"/SECTION:shareddata,RWS")
HINSTANCE glhInstance = NULL;
#define KeyBoardDll_API extern "C" __declspec( dllexport )
KeyBoardDll_API void StartMsgHook();
KeyBoardDll_API void StopMsgHook();
KeyBoardDll_API void GetCount(HWND);
POINT ptNew;
long lCount=0;
HWND g_hwnd;
char szTMP[200];
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
glhInstance = (HINSTANCE) hModule;
// HANDLE hProcess;
// hProcess= GetCurrentProcess();
// SetPriorityClass(hProcess,HIGH_PRIORITY_CLASS);
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 CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;
HDC hdc;
HCURSOR hCursor;
// MSG *pMsg = (MSG*)lParam;
CWPRETSTRUCT *pMsg =(CWPRETSTRUCT*)lParam;
MSG msg;
if (nCode >= 0)
{
switch (pMsg->message)
{
case WM_SETCURSOR:
// MessageBox(NULL,"1111","111",MB_OK);
SetCursor(LoadCursor(glhInstance,MAKEINTRESOURCE(IDC_CURSOR1)));
fEatKeystroke=true;
break;
case WM_DESTROY:
break;
default:
fEatKeystroke=false;
break;
}
}
return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
}
void StartMsgHook()
{
glhHook = SetWindowsHookEx(WH_CALLWNDPROCRET,CallWndRetProc ,glhInstance,0);
}
void StopMsgHook()
{
// 卸载钩子
if (glhHook!=NULL)
UnhookWindowsHookEx(glhHook);
}
void GetCount(HWND hwnd)
{
g_hwnd=hwnd;
}
subchap
2007-08-28
打赏
举报
回复
不太明白lz的意思,我的意思是,每次别的程序改变了光标,都会发出WM_SETCURSOR,然后你的程序捕获每一个WM_SETCURSOR,改成自己的光标,然后返回true,不让消息再传下去.这样实现不了吗?
yierham
2007-08-28
打赏
举报
回复
兄台的 办法是 改变系统光标我试过了,如果 别 的程序窗口没有用系统的光标的话,也是 用的自定义的光标的话,你是没有办法 实现你的效果的
subchap
2007-08-27
打赏
举报
回复
对了,突然想到,可以在每次接收到WM_SETCURSOR的时候到调用一次
SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);
这样的话就算别的程序先收到WM_SETCURSOR改变了Cursor,lz的程序也会立刻把它改回来,
可以试试看效果如何。
subchap
2007-08-27
打赏
举报
回复
这个不太清楚,可以网上搜搜看
subchap
2007-08-26
打赏
举报
回复
如果lz发现所有的WM_SETCURSOR都捕获到了,但是屏蔽不了的话,有可能就是因为这个钩子的优先级不是最高,其他程序已经先收到了WM_SETCURSOR.
yierham
2007-08-26
打赏
举报
回复
请问楼上的怎么设置优先级
subchap
2007-08-25
打赏
举报
回复
楼主DllMain函数的switch部分的具体内容是被省略了还是没写啊?
yierham
2007-08-25
打赏
举报
回复
楼上的多谢了呀!!!在我绝望的时候帮了我一把,但是我想做一个程序,当我的程序运行的时候,不管鼠标移动到桌面上任何窗口上,或则桌面上,显示的鼠标光标都是我自定义的鼠标光标,当程序退出的时候,鼠标恢复为原来的形状,我发现改变系统光标是不行的,那样的话其它程序窗口中的光标如何改?这个办法行不通,我写了个钩子来屏蔽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);
}
鼠标移动的时候WM_SETCURSOR绝对可以捕获的到的,就是屏蔽不掉,其它程序任能接收到WM_SETCURSOR
yierham
2007-08-25
打赏
举报
回复
DllMain函数的switch部分的具体内容,对我的用处不大,在这个程序中也没有什么作用,所以没有写
subchap
2007-08-24
打赏
举报
回复
可以用SystemParametersInfo来还原:
SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0);
yierham
2007-08-24
打赏
举报
回复
算了你们都解决不了,明天来揭贴,自己慢慢弄吧
yierham
2007-08-24
打赏
举报
回复
你放心我调用成功了的效果都出来了的,就是设置不回去啊郁闷
yierham
2007-08-22
打赏
举报
回复
兄弟我试过了你说的方法了,可以替换 但是改 不回来 ,我替换 了想再改回来啊
HCURSOR holdcur=::LoadCursor(NULL,MAKEINTRESOURCE(OCR_NORMAL));
SetSystemCursor(::LoadCursor(hInst,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);//替换
SetSystemCursor(holdcur,OCR_NORMAL);////还原的时候SetSystemCursor(holdcur,OCR_NORMAL)的第2个参数怎么设置,用IDC_MYCURSOR也不行
aa65433
2007-08-22
打赏
举报
回复
HCURSOR holdcur=::LoadCursor(NULL,MAKEINTRESOURCE(OCR_NORMAL));
SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);//替换
SetSystemCursor(holdcur,OCR_NORMAL);//还原
试试看
aa65433
2007-08-22
打赏
举报
回复
函数功能:该函数使一个应用程序定制系统光标。它用hcur规定的光标内容代替id定义的系统光标内容,接着销毁hour。
函数原型:BOOL SetSystemCursor(HCURSOR hour,DWORD id);
参数:
hcur:光标的句柄,该函数hcur标识的光标的内容代替id定义的系统光标内容。系统通过调用DestroyCursor函数销毁hour。因此hour不能是由LoadCursor函数载入的光标。要指定一个从资源载入的光标,先用CopyCursor函数复制该光标,然后把该副本传送给SetSystemCursor函数。
Id:指定由hour的内容替换系统光标。
下面是一系列的系统光标标识符:
OCR_APPSTARTING:标准箭头和小的沙漏;OCR_NORAAC:标准箭头
OCR_CROSS:交叉十字线光标:OCR_HAND:手的形状(WindowsNT5.0和以后版本)
OCR_HELP:箭头和向东标记;OCR_IBEAM:I形梁;OCR_NO:斜的圆
OCR_SIZEALL:四个方位的箭头分别指向北、南、东、西
OCR_SIZENESEW:双箭头分别指向东北和西南;OCR_SIZENS:双箭头,分别指向北和南
OCR_SIZENWSE:双箭头分别指向西北和东南;OCR_SIZEWE:双箭头分别指向西和东
OCR_UP:垂直箭头:OCR_WAIT:沙漏返回值:如果成功,返回非零值;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。
aa65433
2007-08-22
打赏
举报
回复
搜索了下,有人说WINDOWS NT下好象无法还原。。。
aa65433
2007-08-22
打赏
举报
回复
因此hour不能是由LoadCursor函数载入的光标。要指定一个从资源载入的光标,先用CopyCursor函数复制该光标,然后把该副本传送给SetSystemCursor函数。
SetSystemCursor(::LoadCursor(hInst,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL)
这个函数你调用成功了?我刚测试的时候都是返回0
yierham
2007-08-21
打赏
举报
回复
又这方面的代码不?发给我嘛谢谢;了幽香 yierhan111@163.com
aa65433
2007-08-21
打赏
举报
回复
在设置前应该先GETCURSOR保存旧光标,再设置回来
vim的
光标
设置
本文详细介绍如何在Vim编辑器中设置
光标
样式、颜色及位置高亮,包括使用guicursor选项定义不同模式下的
光标
显示,以及通过highlight命令调整
光标
颜色。
怎样 隐藏
光标
—设置
光标
本文介绍了如何在控制台应用程序中隐藏
光标
及设置
光标
位置的方法,包括使用window.h头文件中的API函数如SetConsoleCursorInfo和SetConsoleCursorPosition等,并提供了一个实际的日历系统示例。
光标
设置
这篇博客介绍了如何使用C++来控制台设置
光标
,包括隐藏和显示
光标
,以及调整
光标
的厚度。通过`SetConsoleCursorInfo`函数设置
光标
信息,`CMyConsole`类提供了`ShowCursor`和`HideCursor`方法,方便操作。文章还讨论了`CONSOLE_CURSOR_INFO`结构体及其成员。
光标
函数简介,创建Color
光标
、Alpha
光标
、ShowCursor
本文详细介绍了Windows系统中图标和
光标
相关的API函数,包括创建、复制、销毁图标和
光标
的方法。此外,还深入探讨了如何使用VC++进行
光标
的定制,包括自定义
光标
形状和大小的技术细节。
鼠标
光标
样式大全
本文介绍了在CSS中通过属性设置鼠标
光标
样式的方法。涵盖常见
光标
样式,如默认、手形、文本等;还可自定义
光标
图片,指定热点位置;能为不同元素设置不同
光标
,组合应用多种样式,以提高网页用户体验。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章