笨鸟要在一个单文档(是用VC-MFC)界面里限定一个区域性画线,当鼠标左键按下的同时开始画线,在这过程中,若光标超出所限定的区域就显示good,一次结束都没有超过就显示bad,
请高手们賜賜教啊
其画的线是任意的,
就这么简单,可是笨鸟做不出达不到标,
能否有一点代码提示,谢谢!!!

解决方案 »

  1.   

    SetCapture and ReleaseCapture,在OnMouseMove里面处理并判断是否超过区域!
      

  2.   

    老兄不是想做色情游戏的吧,在MouseMove中随时监测鼠标的位置不就行了
    void CZzzView::OnMouseMove(UINT nFlags, CPoint point) 
    {    if(flag!=1)return;
    // TODO: Add your message handler code here and/or call default
    CRect rect(0,0,200,200);//区域
    if(!rect.PtInRect(point))AfxMessageBox("aa");
    CView::OnMouseMove(nFlags, point);
    }void CZzzView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    flag=1;
    CView::OnLButtonDown(nFlags, point);
    }void CZzzView::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    flag=0;
    CView::OnLButtonUp(nFlags, point);
    }
      

  3.   

    至于,显示bad,good,画线问题,你自己加好了
      

  4.   

    这个是画自由线的一种方法,可以参考一下,看不会的用CSDN海量查一理://以下自由画线按下
    //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    if(m_nDrawType==DRAW_FREE_LINE)
    {

    SetCursor(m_hFreeLineCursor);
    if(m_bDraw)
    {
    CPen pen,*pOldPen;
    pen.CreatePen(m_nPenType,m_nPenWidth,m_ulPenColor);    
    pOldPen=m_pMemDC->SelectObject(&pen);
    memcpy( m_ppvBits, m_pcImageData, m_lLineBytes*m_lHeight );
    m_pMemDC->SelectStockObject(NULL_BRUSH);
    m_pMemDC->MoveTo(m_FreeLineOldPoint);
    m_pMemDC->LineTo(MovePoint);

    CDC * pdc=GetDC();
    pdc->BitBlt(0-ScrollPoint.x,0-ScrollPoint.y,m_lWidth,m_lHeight,m_pMemDC,0,0,SRCCOPY);
    ReleaseDC(pdc);
    memcpy(m_pcImageData,m_ppvBits,m_lLineBytes*m_lHeight );
    m_pMemDC->SelectObject(pOldPen);
    m_FreeLineOldPoint=MovePoint;

    }
    }
    //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    //以上自由画线按下
      

  5.   

    我现在是可以画线的,
    只是同时在那个区域里都可以显示GOOD,可是当鼠标画线超过时会显示NO GOOD,可是当鼠标回到那个区域时又会显示GOOD ,
    现在要怎么让只要显示了NO GOOD,即使鼠标返回到那个区域画线都NO GOOD
      

  6.   

    vcleaner(我没做大哥已经很久了.......)  正解
    用SetCapture and ReleaseCapture,在OnMouseMove里面处理并判断是否超过区域!
      

  7.   

    SetCapture and ReleaseCapture,在OnMouseMove怎么个写法呀
      

  8.   

    我用了SetCapture()
    ::ReleaseCapture);不行呀
    这是什么原因???????????????
      

  9.   

    void CHMouseView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if ( m_rect.PtInRegion(point) )
    {
    m_nEnd = point;
    if ( m_bDown )  
    {
    CDC* pDC = GetDC();
    pDC->MoveTo(m_nStart);
    pDC->LineTo(m_nEnd);
    ReleaseDC(pDC);
    m_bDraw = true;
     

    m_nStart = m_ntEnd;
    }
     
      if(m_rect.PtInRegion(point)&&(m_bDraw))  {
    m_bDraw=true;
    CDC*pDC=GetDC();
    Cfont   hFont;
      hFont.CreateFont(60, 0, 0, 0, FW_BOLD, FALSE, FALSE,0,0,0,0,0,0, "Vineta BT"); //
          pDC->SelectObject(&hFont); 
           pDC->TextOut(150,10,"good");
       }  
      if(! m_rgn.PtInRegion( point)&&(m_bDraw))
      { 
      m_bDraw = true;
       CDC* pDC = GetDC();
           CFont hFont; 
           hFont.CreateFont(60, 0, 0, 0, FW_BOLD, FALSE, FALSE,0,0,0,0,0,0, "Vineta BT"); //
          pDC->SelectObject(&hFont); 
         pDC->TextOut(250,10,"bad");
     bCtrl=true;
        //::Sleep(50);
      
     SetCapture();  }
    请大家帮帮忙看看代码,我的目的就是用一個变量記錄下來,如果当鼠标移到区域外时检测到bad,
    若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。
     // 這樣它移回來,就表示为无效吧,
    这样能否解决,请高手们有一点代码提示一下    谢!!!!
      

  10.   

    不好意思,上面程序有一点小错误,
    请看以下的:void CHMouseView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if ( m_rect.PtInRegion(point) )
    {
    m_nEnd = point;
    if ( m_bDown )  
    {
    CDC* pDC = GetDC();
    pDC->MoveTo(m_nStart);
    pDC->LineTo(m_nEnd);
    ReleaseDC(pDC);
    m_bDraw = true;
     

    m_nStart = m_ntEnd;
    }
     
      if(m_rect.PtInRegion(point)&&(m_bDraw))  {
    m_bDraw=true;
    CDC*pDC=GetDC();
    Cfont   hFont;
      hFont.CreateFont(60, 0, 0, 0, FW_BOLD, FALSE, FALSE,0,0,0,0,0,0, "Vineta BT"); //
          pDC->SelectObject(&hFont); 
           pDC->TextOut(150,10,"good");
       }  
      if(! m_rect.PtInRegion( point)&&(m_bDraw))
      { 
      m_bDraw = true;
       CDC* pDC = GetDC();
           CFont hFont; 
           hFont.CreateFont(60, 0, 0, 0, FW_BOLD, FALSE, FALSE,0,0,0,0,0,0, "Vineta BT"); //
          pDC->SelectObject(&hFont); 
         pDC->TextOut(250,10,"bad");
     
        //::Sleep(50);
      
     SetCapture();  }
    请大家帮帮忙看看代码,我的目的就是用一個变量記錄下來,如果当鼠标移到区域外时检测到bad,
    若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。
     // 這樣它移回來,就表示为无效吧,
    这样能否解决,请高手们有一点代码提示一下    谢!!!!
      

  11.   

    謝謝zhaogaojian,wrcluomo,你們提供的代碼,在我現在這個程序中沒有用上,
    但是也讓我多學了很多東西,謝謝了