VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 770|回复: 8

[求助] CRectTracker 显示问题

[复制链接]
61_avatar_middle
在线会员 发表于 2016-3-10 16:35:55 | 显示全部楼层 |阅读模式
3驿站币
CRectTracker 像皮筋类 我在对话框中添加了一个对话框作为子窗口,然后在这个子窗口中添加了一个像皮筋类  运行后正常能显示但是 当拖动 主对话框时 会出错 发现问题出现在 对话子窗口的onPAINT 刷新函数中 但是这部分代码是从群主的例程里转过来的,不知道为什么会出错,知道的能

画出橡皮筋这部分出错

画出橡皮筋这部分出错
否提个醒 ,谢谢。





上一篇:带窗口的程序如何在开机后用户未登录的情况下自启动
下一篇:GetActiveView崩溃
61_avatar_middle
ico_lz  楼主| 发表于 2016-3-10 16:38:28 | 显示全部楼层
上面的“ 画出橡皮筋”这部分代码 是群主的例程里的代码 ,如果不添加没问题 只是画完"像皮经"后不显示 但是添加后能正常显示但是拖动对话框后将会出错。
51_avatar_middle
online_admins 发表于 2016-3-10 17:52:50 | 显示全部楼层
如果方便的话可以把工程清理下传上来,大家帮你看看
看你贴出来的这些代码,暂时没发现什么问题
46_avatar_middle
在线会员 发表于 2016-3-11 01:19:18 | 显示全部楼层
把工程传上来
61_avatar_middle
ico_lz  楼主| 发表于 2016-3-11 09:16:04 | 显示全部楼层
好的 我把工程上传。在这个例程中 拖动都可以 但是只要主对话框一拖动 就异常了 搞了几天了 没有办法 ,请大家看看 按我上面贴图上的内容 只要在每个子对话的ONpaint中的“绘制橡皮筋这部分”禁用这段代码 那就不会出错,但是橡皮筋的拖动后的显示就没有了,我实在弄不出了,谢谢大家。

橡皮筋例程.zip

50.68 KB, 下载次数: 1

例程有误

61_avatar_middle
ico_lz  楼主| 发表于 2016-3-11 15:28:55 | 显示全部楼层
Syc 发表于 2016-3-10 17:52
如果方便的话可以把工程清理下传上来,大家帮你看看
看你贴出来的这些代码,暂时没发现什么问题

我代码已经上传了 麻烦大哥 有空看看,谢谢。
51_avatar_middle
online_admins 发表于 2016-3-11 16:07:18 | 显示全部楼层
jsszdfdn 发表于 2016-3-11 09:16
好的 我把工程上传。在这个例程中 拖动都可以 但是只要主对话框一拖动 就异常了 搞了几天了 没有办法 ,请 ...

基本帮你改好了,你看看吧,其他的功能你自己完善吧!

橡皮筋例程.zip

47.68 KB, 下载次数: 5

61_avatar_middle
ico_lz  楼主| 发表于 2016-3-12 10:05:43 | 显示全部楼层
Syc 发表于 2016-3-11 16:07
基本帮你改好了,你看看吧,其他的功能你自己完善吧!

没有你的帮助,我还在无目地的摸索,非常感谢你。
61_avatar_middle
ico_lz  楼主| 发表于 2016-3-14 10:17:26 | 显示全部楼层
本帖最后由 jsszdfdn 于 2016-3-14 10:18 编辑

我在群主帮我修改改好的代码基础上完善了下  像皮筋代码修改的部分也贴出来 如有需要的朋友也可以参考下 。
void TableCharacter::OnLButtonDown(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
        Invalidate(TRUE);
        if(m_rectTracker.HitTest(point)<0)
        {
                IsLButtonDown=TRUE;
                CRectTracker temp;
                temp.TrackRubberBand(this,point,TRUE);
                temp.m_rect.NormalizeRect();
               
                //鼠标(矩形选框)起始位置
                pt_start=point;
                //鼠标(矩形选框)结束位置
                GetCursorPos(&pt_end);
                this->SendMessage(WM_LBUTTONUP,NULL,NULL);
                 
                button_down=TRUE;
        }
        //否则重置选框大小或位置
        else
        {
                m_rectTracker.Track(this,point,TRUE);
                m_rectTracker.m_rect.NormalizeRect();
                this->SendMessage(WM_LBUTTONUP,NULL,NULL);
                this->OnPaint();
        }
        CDialog::OnLButtonDown(nFlags, point);
}

void TableCharacter::OnLButtonUp(UINT nFlags, CPoint point)
{
        // TODO: Add your message handler code here and/or call default
        //确保在构造一个新选框时才响应OnLButtonUp,否则在响应OnLButtonDblClk时会出现错误结果
        if(IsLButtonDown==TRUE)
        {
                //MessageBox("鼠标左键松开","松开",NULL);
               
                //由于GetCursorPos获得的pt_end是Screen坐标,故用ScreenToClient()进行转换
                rt.right=pt_end.x;
                rt.bottom=pt_end.y;
                ScreenToClient(&rt);
                pt_end.x=rt.right;
                pt_end.y=rt.bottom;
               
                //left,top,right,bottom
                m_rectTracker.m_rect.SetRect(pt_start.x,pt_start.y,pt_end.x,pt_end.y);
                m_rectTracker.m_rect.NormalizeRect();
               
                this->Invalidate();
                this->OnPaint();
                IsLButtonDown=FALSE;
        }
        else
        {
                this->Invalidate();
                this->OnPaint();

        }

        CDialog::OnLButtonUp(nFlags, point);
}
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-6-19 20:06

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表