我想在显示的图片中用鼠标拖动一块,然后进行剪切。可是怎样才能使拖动时出现虚框呢,就象橡皮筋那种的。周五有热心的大侠说用DrawFocusRect函数。
我写的程序是这样的:void CVCCutImageDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_iEndX=point.x;
m_iEndY=point.y; if (m_LButFlag==1)
{
lRect.left=m_iStartX;
lRect.top=m_iStartY;
lRect.right=m_iEndX;
lRect.bottom=m_iEndY; CClientDC dc(this);
dc.DrawFocusRect(&lRect);  // Draw the Broken line frame
} CDialog::OnMouseMove(nFlags, point);
}这样的结果是在鼠标按下并拖动时,显示出许多虚框,我知道应该再次使用这个函数擦除以前的虚框,可是在MouseMove中再次调用DrawFocusRect时就会什么反映都没有了,不再绘制虚框,哪个热心的人能指点迷津,告诉小女子该怎么改这个东东阿?拜谢了!

解决方案 »

  1.   

    if (m_LButFlag==1)
    {
    lRect.left=m_iStartX;
    lRect.top=m_iStartY;
    lRect.right=m_iEndX;
    lRect.bottom=m_iEndY;                  Invalidate();//加入重绘         } CDialog::OnMouseMove(nFlags, point);个人认为:下面二句放入到OnPaint()中比较好。
    CClientDC dc(this);
    dc.DrawFocusRect(&lRect);  // Draw the Broken line frame
      

  2.   

    不对啊,Onpaint中有CPaintDC了,如果重新定义CClienDC会出错啊,这怎么办啊?
      

  3.   

    你把上次的坐标保存,然后在地方再调用一次DrawFocusRect就可以把上次的框框删掉了:void CVCCutImageDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    m_iEndX=point.x;
    m_iEndY=point.y; if (m_LButFlag==1)
    {
    lRect.left=m_iStartX;
    lRect.top=m_iStartY;
    lRect.right=m_oldx;
    lRect.bottom=m_oldy; CClientDC dc(this);
    dc.DrawFocusRect(&lRect);  //以上代码实现对上一次框框的删除 m_oldx = point.x;          //定义为CVCCutImageDlg的成员变量,用来保存上一次的x坐标
    m_oldy = point.y;          //定义为CVCCutImageDlg的成员变量,用来保存上一次的y坐标
                            lRect.left=m_iStartX;
    lRect.top=m_iStartY;
    lRect.right=m_iEndX;
    lRect.bottom=m_iEndY; dc.DrawFocusRect(&lRect);  // Draw the Broken line frame
    } CDialog::OnMouseMove(nFlags, point);
    }