利用异或画笔画一条一点固定,另一点跟随鼠标移动的直线。各位大哥们,麻烦给小弟看看代码!问题何在!

java_lover_ 2009-06-06 06:37:25

class CMyDlg : public CDialog
{
...
protected:
BOOL m_bLBtnDown;
CPoint m_ptStart;
CArray<CPoint> m_ptArr;
};

void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBtnDown = TRUE;
m_ptStart = point;
CDialog::OnLButtonDown(nFlags, point);
}

void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
m_ptArr.Add( point );
if( m_ptArr.GetSize() == 3 )
{
m_ptArr.RemoveAt( 0 );
}
ASSERT( m_ptArr.GetSize() <= 2 );
CClientDC dc( this );
if( m_ptArr.GetSize() == 2 )
{
dc.SetROP2( R2_XORPEN );
if( m_bLBtnDown )
{
dc.MoveTo( m_ptStart );
dc.LineTo( m_ptArr[0] );
}
}
if( m_bLBtnDown )
{
dc.MoveTo( m_ptStart );
dc.LineTo( point );
}
TRACE1 ( "m_ptArr.GetSize() = %d\n", m_ptArr.GetSize() );
CDialog::OnMouseMove(nFlags, point);
}

void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBtnDown = FALSE;
CDialog::OnLButtonUp(nFlags, point);
}
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
java_lover_ 2009-06-06
  • 打赏
  • 举报
回复
我已经知道了,谢谢各位,我是使用了系统默认的黑色画笔,即0x00000000,用这个数与任何数异或等于任何数,于是看不到画的直线。解决办法是,创建一个白色默认画笔,让其在鼠标左键释放之前填充移动的直线,在鼠标左键松开时在使用自定义的画笔再画一条直线。这样就实现了根Flash一模一样的画直线的效果!
java_lover_ 2009-06-06
  • 打赏
  • 举报
回复
忘了说现象了,我是画不出任何东西!
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_5f30147a0100dwzb.html
可以参考一下
悟迟 2009-06-06
  • 打赏
  • 举报
回复
你是啥现象啊,是不是屏幕花掉了,如果是,那么,你就保存一次上一个鼠标点的位置,画线的时候画两次,上一次的一根线和这次的一根线,如果不是,看楼下吧。
Ryanwen 2009-06-06
  • 打赏
  • 举报
回复
给你个画矩形的 你看看有什么不同,这段代码在mousemove中

//m_ptStart、m_ptPre、m_ptEnd分别为起始点、鼠标移动前的虚终点、终点
pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
nOldMode = pDC->SetROP2(R2_NOTXORPEN); //或者是XORPEN
pDC->Rectangle(m_ptStart.x, m_ptStart.y, m_ptPre.x, m_ptPre.y); //擦除之前的矩形
pDC->Rectangle(m_ptStart.x, m_ptStart.y, m_ptEnd.x, m_ptEnd.y); //绘制当前的矩形
pDC->SetROP2(nOldMode);
pDC->SelectObject(pOldBrush );

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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