VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 171|回复: 2

DrawDragRect绘制的图形颜色不重叠(重叠部分变成了白色)

[复制链接]
29_avatar_middle
最佳答案
0 
在线会员 发表于 2022-2-23 10:30:34 | 显示全部楼层 |阅读模式
成员变量:       
        CRect m_rect;                // 拖动的矩形
        CPoint m_ptOrigin;        // 矩形左上角
        BOOL m_bDraw;                // 是否绘制拖动的矩形
        BOOL m_bFirstDraw;        // 是否第一次绘制矩形
        CBrush m_brush;                // 填充拖放矩形的画刷

构造函数初始化:
        m_bFirstDraw = TRUE;
        m_bDraw = FALSE;
        m_ptOrigin = CPoint(0, 0);
        m_brush.CreateSolidBrush(RGB(255, 0, 0));

鼠标左键按下:
void DragRectTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        m_bFirstDraw = TRUE;        // 第一次绘制矩形
        m_bDraw = TRUE;                        // 开始绘制
        m_ptOrigin = point;                // 鼠标当前位置作为矩形左上角
        CDialogEx::OnLButtonDown(nFlags, point);
}

鼠标左键抬起:
void DragRectTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        m_bDraw = FALSE;        // 停止绘制
        CClientDC dc(this);
        CRect rect(0, 0, 0, 0);

        // 结束填充区域
        dc.DrawDragRect(rect, CSize(1, 1), m_rect, CSize(1, 1), NULL, NULL);

        CDialogEx::OnLButtonUp(nFlags, point);
}

鼠标左键不松开且移动:
void DragRectTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        CClientDC dc(this);
        if (m_bDraw == TRUE)        // 开始绘制
        {
                CRect rect(m_ptOrigin, point);        // 绘制的矩形
                rect.NormalizeRect();                        // 使矩形区域正常化
                if (m_bFirstDraw == TRUE)                // 第一次绘制
                {
                        m_bFirstDraw = FALSE;
                        dc.DrawDragRect(rect, CSize(20, 20), NULL, CSize(20, 20),
                                &m_brush, &m_brush);        // 绘制矩形
                }
                else
                        dc.DrawDragRect(rect, CSize(20, 20), m_rect, CSize(20, 20),
                                &m_brush, &m_brush);        // 绘制拖动的矩形

                m_rect.CopyRect(rect);                        // 保存当前矩形到m_rect
        }

        CDialogEx::OnMouseMove(nFlags, point);
}

重叠部分怎么是白色?怎么改

重叠部分怎么是白色?怎么改




上一篇:如何用系统托盘做一个进度条(一点击系统托盘,他就在上面显示进度条)
下一篇:关于MFC的应用前景?
46_avatar_middle
最佳答案
7 
在线会员 发表于 2022-2-24 09:02:21 | 显示全部楼层
我的实现不是很好,我也很不满意,只是提供一个思路,参考一下吧!!!

DrawDragRect绘制的图形颜色不重叠(重叠部分变成了白色) DragRectTest.rar (12.28 KB, 下载次数: 3)
29_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-2-25 08:10:12 | 显示全部楼层
screen_ok 发表于 2022-2-24 09:02
我的实现不是很好,我也很不满意,只是提供一个思路,参考一下吧!!!

感谢你!DrawDragRect绘制的图形颜色不重叠(重叠部分变成了白色)
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

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

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

GMT+8, 2022-5-18 18:04

Powered by CcTry.CoM

© 2009-2021 cctry.com

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