高手请留步,请教一个问题,有分一定送啦!!!!! 笨鸟要在一个单文档(是用VC-MFC)界面里限定一个区域性画线,当鼠标左键按下的同时开始画线,在这过程中,若光标超出所限定的区域就显示good,一次结束都没有超过就显示bad,请高手们賜賜教啊其画的线是任意的,就这么简单,可是笨鸟做不出达不到标,能否有一点代码提示,谢谢!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SetCapture and ReleaseCapture,在OnMouseMove里面处理并判断是否超过区域! 老兄不是想做色情游戏的吧,在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);} 至于,显示bad,good,画线问题,你自己加好了 这个是画自由线的一种方法,可以参考一下,看不会的用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; } } //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //以上自由画线按下 我现在是可以画线的,只是同时在那个区域里都可以显示GOOD,可是当鼠标画线超过时会显示NO GOOD,可是当鼠标回到那个区域时又会显示GOOD ,现在要怎么让只要显示了NO GOOD,即使鼠标返回到那个区域画线都NO GOOD vcleaner(我没做大哥已经很久了.......) 正解用SetCapture and ReleaseCapture,在OnMouseMove里面处理并判断是否超过区域! SetCapture and ReleaseCapture,在OnMouseMove怎么个写法呀 我用了SetCapture()::ReleaseCapture);不行呀这是什么原因??????????????? 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,若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。 // 這樣它移回來,就表示为无效吧,这样能否解决,请高手们有一点代码提示一下 谢!!!! 不好意思,上面程序有一点小错误,请看以下的: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,若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。 // 這樣它移回來,就表示为无效吧,这样能否解决,请高手们有一点代码提示一下 谢!!!! 謝謝zhaogaojian,wrcluomo,你們提供的代碼,在我現在這個程序中沒有用上,但是也讓我多學了很多東西,謝謝了 访问webservice接口,调用接口函数后无返回值 vc2005 下编译的OCX发布到网页,不能正确加载 请问几个属性页之间怎么数据传递 弱问:初学vc静态成员,出错:'Student' followed by 'int' is illegal (did you forget a ';'?) #######继续送分问 select的问题 谢谢大家####### 关于DirectShow的问题:我怎样在我的Video上显示字幕? 请教一个窗体图标问题 新手!谢谢! 简单的语法问题 我认为不大可能解决的一个问题 请问VB写的ActiveX组件在VC中怎么调用? 关于计数器的简单问题
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);
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
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;
}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//以上自由画线按下
只是同时在那个区域里都可以显示GOOD,可是当鼠标画线超过时会显示NO GOOD,可是当鼠标回到那个区域时又会显示GOOD ,
现在要怎么让只要显示了NO GOOD,即使鼠标返回到那个区域画线都NO GOOD
用SetCapture and ReleaseCapture,在OnMouseMove里面处理并判断是否超过区域!
::ReleaseCapture);不行呀
这是什么原因???????????????
{
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,
若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。
// 這樣它移回來,就表示为无效吧,
这样能否解决,请高手们有一点代码提示一下 谢!!!!
请看以下的: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,
若鼠标又回到区域内时,就不進行檢測,也就是不做任何處理。
// 這樣它移回來,就表示为无效吧,
这样能否解决,请高手们有一点代码提示一下 谢!!!!
但是也讓我多學了很多東西,謝謝了