社区
界面
帖子详情
拖图
wanshi_53
2005-06-09 01:12:07
我们在使用reader阅读文件时,在工具栏选项有一个手状的工具,点击后可实现我们对当前文本拖动,那么我们在vc中是如何实现的呢?原理是什么呢?
...全文
75
5
打赏
收藏
拖图
我们在使用reader阅读文件时,在工具栏选项有一个手状的工具,点击后可实现我们对当前文本拖动,那么我们在vc中是如何实现的呢?原理是什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
thebit
2005-06-12
打赏
举报
回复
不好意思。上贴里的一些地方没有改正。因为我是用MoveSelOB1工程句的,最后多了个后缀1.
所以,以上没改正的,记得相应改。
thebit
2005-06-12
打赏
举报
回复
当我练习打字咯....
在求是科技的这本书<VC++实效编程百例>>里有一个贴切的例子:P78 实例32:拖放选中对象.
如下:
实现方法:当鼠标左键在图形区域被按下时,捕捉所有鼠标消息,并且响应鼠标移动消息,随时师尊图形的位置,重画图形.
(1)利用AppWizard创建SDI床的应用等距离 MoveSelOb,并且选择视图类的蕨类为CScrollView.
(2)在视图类的头文件中增加4个变量,用来保存图形位置和鼠标捕捉情况,其代码如下:
protected:
const CSize m_sizeEllipse;
CPoint m_pointTopLeft;
CSize m_sizeOffset;
BOOL m_bCaptured;
(3)在构造类的构造函数中初始化变量,其代码如下:
CMoveSelObView::CMoveSelObView():m_sizeEllipse(100,-100),m_pointTopLeft(0,0),m_sizeOffset(0,0)
{
// TODO: add construction code here
m_bCaptured= FALSE;
}
(4)在视图类的 OnInitialUpdate 函数中初始化视图的滚动范围:
void CMoveSelOb1View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
// 设置滚动范围
CSize sizeTotal(800,1050); // 8-by-10.5 inches
CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);
SetScrollSizes(MM_LOENGLISH, sizeTotal,sizePage,sizeLine);
}
(5)在视图类的 OnDraw 函数中绘图:
void CMoveSelOb1View::OnDraw(CDC* pDC)
{
CMoveSelOb1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// 创建红色画刷
CBrush brushHatch(HS_DIAGCROSS, RGB(255,0,0));
CPoint point(0,0);
// 转换逻辑坐标为设备坐标
pDC->LPtoDP(&point);
pDC->SetBrushOrg(point);
CBrush* pOldBrush = pDC->SelectObject(&brushHatch);
// 画红色圆圈
pDC->Ellipse(CRect(m_pointTopLeft,m_sizeEllipse));
pDC->SelectObject(pOldBrush);
}
(6)响应WM_LBUTTONDOWN 消息:
void CMoveSelOb1View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rectEllipse(m_pointTopLeft,m_sizeEllipse);
CRgn circle;
CClientDC dc(this);
OnPrepareDC(&dc);
dc.LPtoDP(rectEllipse);
circle.CreateEllipticRgnIndirect(rectEllipse);
if(circle.PtInRegion(point)){
// 捕捉鼠标
SetCapture();
m_bCaptured= TRUE;
CPoint pointTopLeft(m_pointTopLeft);
dc.LPtoDP(&pointTopLeft);
m_sizeOffset=point-pointTopLeft;
// 设置光标形状为十字状
::SetCursor(::LoadCursor(NULL, IDC_CROSS));
}
CView::OnLButtonDown(nFlags, point);
}
(7)响应 WM_LBUTTONUP :
void CMoveSelOb1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bCaptured){
// 释放鼠标捕捉
::ReleaseCapture();
m_bCaptured= FALSE;
}
CView::OnLButtonUp(nFlags, point);
}
(8)响应 WM_MOUSEMOVE:
void CMoveSelOb1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bCaptured){
// 如果有图形被选中,并且鼠标捕捉则更新图形位置
CClientDC dc(this);
OnPrepareDC(&dc);
CRect rectOld(m_pointTopLeft,m_sizeEllipse);
dc.LPtoDP(&rectOld);
// 擦除老位置的图形
InvalidateRect(rectOld,TRUE);
m_pointTopLeft = point - m_sizeOffset;
dc.DPtoLP(&m_pointTopLeft);
// 在新位置画图形
CRect rectNew(m_pointTopLeft,m_sizeEllipse);
dc.LPtoDP(rectNew);
InvalidateRect(rectNew, TRUE);
}
CView::OnMouseMove(nFlags, point);
}
//---------------- THE END --------------------
如果要VC工程的完整代码,请给我email. toahming@126.com,书没随送代码,只有自己敲。^_^
wanshi_53
2005-06-10
打赏
举报
回复
楼上的不好意思。你说的那些我没能实现!
调试程序过程中
问题1:OnLButtonDown能够实现,并且出现自定义鼠标形状
2:调试程序,没能跳到OnLButtonUp程序中
3: OnMouseMove需要添加什么呢?
比如我们要拖动视图中自己画的一个圆,那样能实现吗?
wanshi_53
2005-06-09
打赏
举报
回复
谢谢楼上的
我明天就去做一下如果可以,那真是谢谢你了!
vcmute
2005-06-09
打赏
举报
回复
OnLButtonDown时SetCursor(LoadCursor(NULL, IDC_HAND));设置光标形状,然后SetCapture,随着MouseMove移动文本,OnLButtonUp时ReleaseCapture
threejs炫酷地图(地图流光,飞线,水印动画,高光)
我们这套课程将会学习如何创建3D地图,地图流光效果,波浪效果,省份标签,地图飞线,飞机效果,水印文字,高光效果。 涉及到的知识点:物体,材质,线段,文字加载,屏幕后处理,shader。 我们地图流光的效果做法比...
ps图片拖不进去_ps不能直接把图片拖进去怎么办
每当用户需要对图片进行深入修改时,ps软件无疑是最好的选择,如今越来越多的用户都开始熟悉ps软件的操作,可是为了能够提高操作效率,我们在选择想要修改的图片时,却不能直接把图片拖进去,那么ps不能直接把图片拖...
PS不能直接拖入图片的解决办法
PS不能直接拖入图片是因为权限的原因,即使以管理员运行了该软件 找到PS的安装目录,找到.exe结尾的PS运行程序,右键–管理员取得所有权,之后再打开就可以正常拖入图片了。 如果右键没有管理员取得所有权怎么办,...
优漫动游:如何解决Adobe XD无法拖入图片?
随着使用Adobe XD软件的用户越来越多,也有越来越多的人在使用的过程当中遇到图片无法拖入的问题出现。对于XD软件无法拖入图片,那么就会对于原型创建设计有一定的影响作用!下面我们就来解决一下XD无法拖入图片的...
PS无法直接拖入图片如何解决?
最近学习PS,遇见PS无法直接拖入图片的问题。解决该问题后,写下该文以供其他读者遇见同样的“坑“能够快速解决。
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章