社区
图形处理/算法
帖子详情
光标、光标、光标、光标、光标、光标、光标、
yierham
2007-08-21 06:01:27
用SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL);
改变系统的光标后如何将它再设置回来
...全文
456
20
打赏
收藏
光标、光标、光标、光标、光标、光标、光标、
用SetSystemCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_MYCURSOR)),OCR_NORMAL); 改变系统的光标后如何将它再设置回来
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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保存旧光标,再设置回来
js获取
光标
位置
js获取
光标
位置1.概念和原理DOM中并没有直接获取
光标
位置的方法,那么我们只能间接来获取
光标
位置。DOM支持获取
光标
选中的范围,我们可以以此为切入点,来获取或定位
光标
的位置。当选取范围起始点和结束点一样时,...
idea
光标
快捷键_idea
光标
快捷键
1、Ctrl+Alt+Left/Right
光标
定位到上一个/下一个浏览位置处;ctrl+alt+
光标
左右键特别是在源码查看的时候很有用;2、Ctrl+Shift+Backspace
光标
定位到上次修改的地方;3、Alt+Up/Down 移动
光标
到上一个/下一个方法...
html让
光标
位置,科技常识:html5中contenteditable
光标
_如何设置
光标
位置
今天小编跟大家讲解下有关html5中contenteditable
光标
_如何设置
光标
位置 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关html5中contenteditable
光标
_如何设置
光标
位置 的相关资料,希望小伙伴们看了...
使用
光标
精灵更换电脑鼠标
光标
样式,一键安装使用
在选择了喜欢的
光标
图案后,点击下载使用,系统会自动更换
光标
皮肤。使用
光标
精灵后,如果想更换新的
光标
,只需选择新的图案,点击...想要更换
光标
图案,改变
光标
指针的外观,可以尝试使用一个名为“
光标
精灵”的软件。
html元素contenteditable属性如何定位
光标
和设置
光标
光标
就是在selection里面,
光标
叫做range,是一个片段区域,和selection一样,有开始点,和结束点,当我们对文字按下左键向右拉的时候,就看到了文字变成蓝色,那个就是
光标
的开始和结束,当我们直接点一下的时候,...
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章