VS2005 拉伸或拖动绘制好的矩形框

鱼儿贝贝 2010-04-21 12:58:41
我在Picture控件上,利用鼠标响应事件(OnLButtonDown、OnMouseMove、OnLButtonUp)绘制了一个矩形框,接下来希望做的事情就是,当鼠标移动到绘制的这个矩形框的各个角点的时候,鼠标变为双向箭头可以拉伸此矩形框,若在此矩形框内移动时,变为四向箭头,可拖动此矩形框。请问各位朋友,如何实现?
我认为应该在OnMouseMove函数中编写,判断我刚才绘制的矩形框的四边,但是鼠标移动的时候,没有任何响应。希望朋友们给点提示。因为在同一个OnMouseMove函数中编写,总觉得跟之前定义的那些点,又有些联系!
...全文
405 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyelun 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xwdd129 的回复:]
使用CRectTracker类,参考:
http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/misc_21/1021002.htm
[/Quote]
学习下
鱼儿贝贝 2010-04-23
  • 打赏
  • 举报
回复
大侠,你能不能具体给我写点啊?在对话框中实现,不会么!
鱼儿贝贝 2010-04-23
  • 打赏
  • 举报
回复
根据上面CRectTracker类的引用,我做了一个基于对话框的MFC的小例子。在对话框上放置一个Picture控件和一个按钮,当点击按钮后,显示设定好的橡皮筋矩形框。但是接下来的操作就出现了问题:
问题一:鼠标移动到此矩形框的内部时,鼠标变成四向箭头,但是鼠标移动到角点的时候,鼠标形状却未发生变化,这是为什么呢?
问题二:点击鼠标左键并拖动此矩形框,此时矩形框消失,只有再次点击按钮,才出现移动位置后的矩形框。

我想实现的效果就应该像上面给出的例子一样:鼠标移动相应的位置时,光标改变形状,拉伸与拖动时,矩形框不消失,请各位朋友帮我修改下。附上我写的代码:
在OnInitDialog()中如下代码,对矩形框进行设置:
m_rectTracker.m_rect.SetRect(0,0,100,100);
m_rectTracker.m_nStyle=CRectTracker::resizeInside|CRectTracker::dottedLine;

按钮事件OnBnClickedButton1中代码如下:
CRect pic_rc;
CStatic* pPicture1 = (CStatic*)GetDlgItem(IDC_PIC);
pDC = (CDC*)pPicture1->GetDC(); // 取得CDC
GetDlgItem(IDC_PIC)->GetClientRect(&pic_rc);//得到Picture控件自身大小
CRect rc;
m_rectTracker.GetTrueRect(rc);
m_rectTracker.Draw(pDC);//画出四边

鼠标左键按下事件OnLButtonDown函数中代码如下:
int nIn;
nIn=m_rectTracker.HitTest(point);
if (nIn<0) //不在四边形区域内
{
CRectTracker temp;
temp.TrackRubberBand(this,point,TRUE);
temp.m_rect.NormalizeRect();//正规化
Invalidate(); //引起OnDraw函数的发生;
}
else //在四边形区域内
{
CClientDC dc(this);
m_rectTracker.Draw(&dc);
m_rectTracker.Track(this,point,TRUE);
Invalidate();
}

光标设置事件OnSetCursor函数中,代码如下:
if (pWnd == this && m_rectTracker.SetCursor(this, nHitTest))
return TRUE;

请各位朋友帮我看下哪里需要修改,谢谢!
鱼儿贝贝 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xwdd129 的回复:]
使用CRectTracker类,参考:
http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/misc_21/1021002.htm
[/Quote]

谢谢你的提示,这个例子是用单文档做的,跟在基于对话框的MFC中实现不同,我还得琢磨一下!
xwdd129 2010-04-22
  • 打赏
  • 举报
回复
使用CRectTracker类,参考:
http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/misc_21/1021002.htm
鱼儿贝贝 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yincheng01 的回复:]
应当进行坐标转换,窗口坐标到桌面坐标的转换
[/Quote]

能具体说说吗?我对这方面不是很理解。。。。。
xwdd129 2010-04-22
  • 打赏
  • 举报
回复
在OnPaint里写绘图代码即可
xwdd129 2010-04-22
  • 打赏
  • 举报
回复
基于对话框里用是一样的,可能还简单些
尹成 2010-04-21
  • 打赏
  • 举报
回复
应当进行坐标转换,窗口坐标到桌面坐标的转换
鱼儿贝贝 2010-04-21
  • 打赏
  • 举报
回复
OnMouseMove中:
以下是为了判断先判断鼠标移动的时候,光标是否改变
pt_rect就是我画的矩形框
if (m_oldpos.x>pt_rect.left && m_oldpos.x<pt_rect.right)
{
SetCursor(LoadCursor(NULL,IDC_SIZENS));//上下双向箭头光标
}
社会栋梁 2010-04-21
  • 打赏
  • 举报
回复
你OnMouseMove里的代码怎么写的
有没有坐标转换
奔跑前行 2010-04-21
  • 打赏
  • 举报
回复
不是很懂 学习了 帮你顶下
2022年11月4日-2022年11月14日购买当前课程赠送课程学习地址如下:https://edu.csdn.net/course/detail/32434https://edu.csdn.net/course/detail/35658https://edu.csdn.net/course/detail/30223https://edu.csdn.net/course/detail/32408https://edu.csdn.net/course/detail/32429注:因赠送课程不会出现在已订阅课程列表中,以下课程学习地址一定要收藏保存。#课程服务 在线答疑:本课程设有专门的讨论留言区,学习中遇到任何问题,直接给老师留言即可,老师都会及时进行回复。远程协助:如果遇到复杂问题,老师还可进行远程协助,这个一般可不是一两百元的课程就能享受到的。源码分享:为了让大家更好的进行项目实战,老师还将课程中涉及到的所有源码分享给学员,按照视频中的提示进行下载即可。在CSDN分享C++ Qt开发知识已经有6年了,感谢众多博友对我的支持,了解到很多人对Qt的使用还是有些困扰,例如Qt环境搭建,Qt布局的使用,如何使用Qt编写复杂的界面,如何自定义非标控件,Qt如何和Web交互,Qt和后台接口如何交互等;经过这几年的整理,我决定出这套《Qt高级开发视频教程》,带领大家学习Qt高级开发知识,学习如何使用Qt开发企业级别的项目;通过本课程的学习,大家将会达到企业招聘的中高级要求。为了照顾零基础学员,本课程第一章会介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。即使没有Qt开发的学习经验,也能跟着课程顺利学习。课程核心知识点地图如下: 课程每章核心知识点介绍如下: 第一章:介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。第二章:了解到很多学员对于Qt界面布局很不熟悉,将会详细介绍Qt设计器布局,以及如何C++代码手写布局,从常见的企业级项目入手,带领大家学会各种布局的实现,例如WPS、腾讯会议、优酷、迅雷等界面的实现;界面布局会了,这是企业项目开发的第一步,还有更重要的无边框窗口,如何设计一个合理的无边框窗口很重要,第三/四章:详细介绍如何实现一个无边框窗口,如何自定义标题栏,如何实现拖拽拉伸;第四章将会介绍如何自定义非标控件,优化Qt界面。第五章:介绍Qt web混合编程,一个商用项目,必然会涉及到web交互,这也是很多Qt开发者的弱项,这一章讲详细介绍C++ Qt web混合开发。第六章:既然是做企业级项目,必然需要和后台交互,http编程也是必要的,将详细介绍http编程,用户注册,登录,后台接口请求等知识;通过第五、六章的学习,将会是你的Qt开发技术更上一层楼。第七章:介绍Qt并发编程,耗时任务处理,进程调用等知识。第八、九章:讲解 Qt 比较重要的知识,图形视图结构,以及MVD模式;通过这两章的学习,大家会对图形视图有更好的了解。第十章:本章是独立章节,主要介绍Qt中一些特殊技巧,项目编译,dpi适配、多语言等知识。第十一章:是我们的企业级项目实战:实现一个视频会议客户端,本项目可以进行多人视频通话,直播,桌面分享等功能,本项目我会从零开始,进行项目搭建,功能调试,bug fixed, 带领大家做一个企业级项目。希望通过本课程的学习,大家的C++ Qt开发技术能有质的飞越,能找到自己心仪的工作。课程中如果讲的不对的地方,请大家指出,我及时修正,我也只是一个普通开发者,也不是所有的技术都会,尽我所能,把我所会的教给大家,让我们一起为Qt的发展,尽一份绵薄之力。 下面是本课程一些项目的截图: 1 可以滑动的设置界面         2 所有图形的绘制       3 视频播放器          4 高仿youku界面         5 视频会议         相信通过本课程的学习,大家有能力实现绝大部分客户端项目,从此用C++ Qt再也不会有难写的界面。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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