VC如何让图标跟随鼠标移动

rion10 2013-01-09 01:05:21
一个IDC_MYICON资源,通过DrawIconEx()可以把此图标显示在屏幕上,想要实现此图标跟随鼠标移动,并且屏幕没有明显延迟,请问如何实现? 谢谢!

hdc = GetDesktopWindow();
...
...
DrawIconEx(hwnd, ...);
....
...全文
404 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-04-08
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
sumos 2013-01-14
  • 打赏
  • 举报
回复
引用 楼主 rion10 的回复:
一个IDC_MYICON资源,通过DrawIconEx()可以把此图标显示在屏幕上,想要实现此图标跟随鼠标移动,并且屏幕没有明显延迟,请问如何实现? 谢谢! hdc = GetDesktopWindow(); ... ... DrawIconEx(hwnd, ...); ....
干嘛这么麻烦。你可以用一个分层窗口来完成。
sumos 2013-01-14
  • 打赏
  • 举报
回复
引用 11 楼 rion10 的回复:
引用 10 楼 zhoujielunzhimi 的回复:干嘛这么麻烦。你可以用一个分层窗口来完成。…… 能否给个例子?谢谢!
我说下原理你就明白了:分层窗口,你用gdi+绘制png,png是什么形状,最终的效果就是什么形状。 至于code,百度一下,例子非常多,而且代码行不到30行。
rion10 2013-01-14
  • 打赏
  • 举报
回复
引用 10 楼 zhoujielunzhimi 的回复:
干嘛这么麻烦。你可以用一个分层窗口来完成。……
能否给个例子?谢谢!
rion10 2013-01-13
  • 打赏
  • 举报
回复
如下调用: // 负责生成坐标 func1() { which (true) { x = y = 0; Draw(x, y); x++; y++; if (x>500 || y>500) break; } } // 负责画图 Draw(int x, int y) { HWND hWnd = GetDesktopWindow(); //创建屏幕DC HDC hDC = GetWindowDC(hWnd); //创建内存DC HDC hMemDC = CreateCompatibleDC(hDC); CBitmap hBitmap; hBitmap.LoadBitmap(IDB_BMP_CURSOR); HBITMAP oldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap); ::TransparentBlt(hDC, x, y, 32, 32, hMemDC, 0, 0, 32, 32, RGB(0,0,0)); ::SelectObject(hMemDC, oldBitmap); ::DeleteObject(hBitmap); //删除内存DC ::DeleteDC(hMemDC); //释放屏幕DC ::ReleaseDC(hWnd, hDC); } 现在问题是,图片能显示出来,也能移动,但是没有清除以前画出来的图片,导致屏幕上显示了多个同样的图片。即:如何Draw(1,1)时把Draw(0,0)的图片清除掉并且不导致屏幕闪动? 谢谢!
jimette 2013-01-10
  • 打赏
  • 举报
回复
有个 colorcursor工程 在codeproject网站
BeanJoy 2013-01-09
  • 打赏
  • 举报
回复
引用 6 楼 rion10 的回复:
HWND hWnd = GetDesktopWindow(); HDC hDC = GetWindowDC(hWnd); HICON hIcon = ::LoadIcon(AfxGetApp()-> m_hInstance, MAKEINTRESOURCE(IDI_ICON_CURSOR)); ::DrawIconEx(hDC, rgnX, rgnY, hIcon,……
你的意思是,鼠标那个指针在,而它下面还有一个图片随之移动? 5楼版本大人那个帖你可以参考。
rion10 2013-01-09
  • 打赏
  • 举报
回复
HWND hWnd = GetDesktopWindow(); HDC hDC = GetWindowDC(hWnd); HICON hIcon = ::LoadIcon(AfxGetApp()-> m_hInstance, MAKEINTRESOURCE(IDI_ICON_CURSOR)); ::DrawIconEx(hDC, rgnX, rgnY, hIcon, 16, 16, 0, NULL, DI_NORMAL); 不是把鼠标光标变成自定义图标,而是通过鼠标控制该图标的移动。
傻X 2013-01-09
  • 打赏
  • 举报
回复
看看本版的界面版主xianglitian的一篇blog文章吧,很详细哦 拖拽效果实现
Eleven 2013-01-09
  • 打赏
  • 举报
回复
SetSystemCursor() CopyCursor()
sumos 2013-01-09
  • 打赏
  • 举报
回复
做一个全局钩子。
MoreWindows 2013-01-09
  • 打赏
  • 举报
回复
先 HCURSOR cursor = (HCURSOR)LoadImage(hinstance, MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR); 再 SetCursor(cursor);
BeanJoy 2013-01-09
  • 打赏
  • 举报
回复
用SetCursor、LoadCursor和MAKEINTRESOURCE来设置鼠标形状,而不是通过Draw来画。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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