如何截取鼠标图案

清歌谁与和 2003-11-08 07:48:18
我想截取游戏里的鼠标图案,可是用下面的代码只能得到普通的箭头光标。
请问应该如何解决呢?

HCURSOR hCur= GetCursor ();
dc.DrawIcon (0,0,hCur);
...全文
198 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
luolovegui 2003-12-02
  • 打赏
  • 举报
回复
关注,高手。
清歌谁与和 2003-12-02
  • 打赏
  • 举报
回复
to shootingstars(流星) :

谢谢你的代码,不过我试了一下,跟我用下面的代码一样,得到的是普通的箭头光标
HCURSOR hCur= GetCursor ();
dc.DrawIcon (0,0,hCur);
这是怎么回事呀?
(我可以肯定这个游戏里的鼠标不是贴图的)


shootingstars 2003-11-13
  • 打赏
  • 举报
回复
如果游戏设置了鼠标,应该可以用下面的代码获得(但是如果游戏只是隐藏了鼠标,然后用一位图跟着鼠标移动,下面的代码无效。)
原作:mct1025(macuntao)
//warning: this code snippet is not bullet proof.
HCURSOR hcur = ::GetCursor();

if(hcur==NULL)
return;
ICONINFO icon;
::GetIconInfo(hcur,&icon);
HBITMAP hbmp;
BITMAP bm;
::GetObject(icon.hbmMask,sizeof(BITMAP),&bm);

HDC hGlobal,hDCMask,hDCColor;
hGlobal = ::GetDC(NULL);
hDCMask = ::CreateCompatibleDC(hGlobal);
hDCColor = ::CreateCompatibleDC(hGlobal);
hbmp = ::CreateCompatibleBitmap(hGlobal,bm.bmWidth,bm.bmWidth);
::SelectObject(hDCColor,hbmp);

::FloodFill(hDCColor,0,0,RGB(255,255,255));//背景色
::SelectObject(hDCMask,icon.hbmMask);
::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,0,SRCAND);
if (icon.hbmColor == NULL)
::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,bm.bmWidth,SRCINVERT);
else
{
::SelectObject(hDCMask,icon.hbmColor);
::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,0,SRCINVERT);
}

PICTDESC picdesc;
picdesc.cbSizeofstruct = sizeof(PICTDESC);
picdesc.picType = PICTYPE_BITMAP ;
picdesc.bmp.hbitmap = hbmp;
IPicture* pPicture=NULL;
OleCreatePictureIndirect(&picdesc, IID_IPicture, TRUE,(VOID**)&pPicture);
LPSTREAM pStream;
CreateStreamOnHGlobal(NULL,TRUE,&pStream);
LONG size;
HRESULT hr=pPicture->SaveAsFile(pStream,TRUE,&size);
char pathbuf[1024];
strcpy(pathbuf,"c:\\myarrow.bmp");

FILE *stream;
stream = fopen( pathbuf, "w" );
LARGE_INTEGER li;
li.HighPart =0;
li.LowPart =0;
ULARGE_INTEGER ulnewpos;
pStream->Seek( li,STREAM_SEEK_SET,&ulnewpos);
ULONG uReadCount = 1;
while(uReadCount>0)
{

pStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);
if(uReadCount>0)
fwrite( pathbuf,sizeof(char),uReadCount,stream);
}
pStream->Release();
fclose( stream );

::DeleteObject(icon.hbmMask);
if (icon.hbmColor != NULL)
::DeleteObject(icon.hbmColor);
::DeleteObject(hbmp);
::ReleaseDC(NULL,hDCMask);
::ReleaseDC(NULL,hDCColor);
::ReleaseDC(NULL,hGlobal);
清歌谁与和 2003-11-12
  • 打赏
  • 举报
回复
up
canjian 2003-11-09
  • 打赏
  • 举报
回复
gz
yjjbmk 2003-11-09
  • 打赏
  • 举报
回复
用OnSetCursor函数行不行啊?
feeboby 2003-11-08
  • 打赏
  • 举报
回复
up
清歌谁与和 2003-11-08
  • 打赏
  • 举报
回复
to dzqsuper(数风流人物-还看CSDN(丁轲)):
我是想拷屏时把鼠标也拷下来,但是用BitBlt得到的图象并没有鼠标
所以 我想先拷屏 ,再在上面画鼠标
不知道你有没有好方法??
limd 2003-11-08
  • 打赏
  • 举报
回复
也只有UP一下了
dzqsuper 2003-11-08
  • 打赏
  • 举报
回复
你是什么意思
是不是想把那个图标保存到本地
还是有什么别的想法
ablefirst 2003-11-08
  • 打赏
  • 举报
回复
帮你UP,
关注。
清歌谁与和 2003-11-08
  • 打赏
  • 举报
回复
有没有人知道啊???

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧