社区
图形处理/算法
帖子详情
光标、光标、光标、光标、光标、光标、光标、
yierham
2007-08-21 06:01:27
用SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);
改变系统的光标后如何将它再设置回来
...全文
437
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保存旧光标,再设置回来
cocos2d-x带
光标
的输入框
封装cocos2d-x中的CCTextFieldTTF为带
光标
的输入框
js获取
光标
位置
js获取
光标
位置1.概念和原理DOM中并没有直接获取
光标
位置的方法,那么我们只能间接来获取
光标
位置。DOM支持获取
光标
选中的范围,我们可以以此为切入点,来获取或定位
光标
的位置。当选取范围起始点和结束点一样时,就是
光标
插入的位置。1.1 术语anchor(瞄点):选区起点。focus(焦点):选区终点。range(范围):选区范围,包含整个节点或节点的一部分。1.2 SelectionSelectio
C语言贪吃蛇
3、保证带大家写出一个完整的有价值的小项目 课时目录: 1、贪吃蛇项目介绍 2、输出头信息 3、输出边框 4、设置
光标
位置 5、定义蛇身结构体 6、生成3个节点的蛇 7、释放链表 8、将蛇画在背景上 9、蛇动 10、消除...
idea
光标
快捷键_idea
光标
快捷键
1、Ctrl+Alt+Left/Right
光标
定位到上一个/下一个浏览位置处;ctrl+alt+
光标
左右键特别是在源码查看的时候很有用;2、Ctrl+Shift+Backspace
光标
定位到上次修改的地方;3、Alt+Up/Down 移动
光标
到上一个/下一个方法开始处;alt+
光标
上下键在方法之间跳动,内部类的方法也是会跳上去的;4、Ctrl+Left/Right 移动
光标
到前...
html让
光标
位置,科技常识:html5中contenteditable
光标
_如何设置
光标
位置
今天小编跟大家讲解下有关html5中contenteditable
光标
_如何设置
光标
位置 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关html5中contenteditable
光标
_如何设置
光标
位置 的相关资料,希望小伙伴们看了有所帮助。在js中
光标
是一个对象 当你选中某个元素的时候才会出现
光标
对象。比如:我们点击一个输入框 实际会产生一个选中对象-selection 这个对象...
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章