我要实现鼠标点击圆形区域,在区域外画一个红色的矩形
我画了两个圆,且要求红矩形能在两个圆间切换,就是说点击第一个圆,红矩形显示,而第二个圆外没有;点击第二个圆,红矩形显示,而第一个圆外没有;
BOOL CLabel2View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC;
CDC dcMem;
pDC=GetDC();
CClientDC dc(this);
OnPrepareDC(&dc);
CRect rc;
GetClientRect(&rc); int x1=rc.right/2-200;
int y1=300-200;
int x2=rc.right/2+200;
int y2=300+200;
int y5=750-200;
int y6=750+200;
CRect rgn(x1,y1,x2,y2);
CRect rect(x1,y5,x2,y6);
if(rgn.PtInRect(point))
{ SetCapture();
m_bCaptured=TRUE;
m_bCaptured1=FALSE;
::SetCursor(::LoadCursor(NULL,IDC_CROSS));
}
else if(rect.PtInRect(point))
{
SetCapture();
m_bCaptured1=TRUE;
m_bCaptured=FALSE;
::SetCursor(::LoadCursor(NULL,IDC_CROSS));
}
ReleaseDC(pDC); return m_bCaptured;
CScrollView::OnLButtonDown(nFlags, point);
}
我在onLbuttonDown 设标志,在ondraw 里画,可是响应非常慢,大家帮我看看怎么回事void CLabel2View::OnDraw(CDC* pDC)
{//// 圆已经画过/////////
CPoint point ;
GetCursorPos(&point);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
if(m_bCaptured==TRUE)
{
pDC->Rectangle(x1-20,y1-20,x2+20,y2+20);
pDC->SelectObject(&ppenOld);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
}
if(m_bCaptured1==TRUE)
{
pDC->Rectangle(x1-20,y5-20,x2+20,y6+20);
pDC->SelectObject(&ppenOld);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
}
void CLabel2View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bCaptured){
::ReleaseCapture();
m_bCaptured=FALSE;
m_bCaptured1=FALSE;
}}
大家帮我看看或提个办法,妹妹在这里谢谢了!
我画了两个圆,且要求红矩形能在两个圆间切换,就是说点击第一个圆,红矩形显示,而第二个圆外没有;点击第二个圆,红矩形显示,而第一个圆外没有;
BOOL CLabel2View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC;
CDC dcMem;
pDC=GetDC();
CClientDC dc(this);
OnPrepareDC(&dc);
CRect rc;
GetClientRect(&rc); int x1=rc.right/2-200;
int y1=300-200;
int x2=rc.right/2+200;
int y2=300+200;
int y5=750-200;
int y6=750+200;
CRect rgn(x1,y1,x2,y2);
CRect rect(x1,y5,x2,y6);
if(rgn.PtInRect(point))
{ SetCapture();
m_bCaptured=TRUE;
m_bCaptured1=FALSE;
::SetCursor(::LoadCursor(NULL,IDC_CROSS));
}
else if(rect.PtInRect(point))
{
SetCapture();
m_bCaptured1=TRUE;
m_bCaptured=FALSE;
::SetCursor(::LoadCursor(NULL,IDC_CROSS));
}
ReleaseDC(pDC); return m_bCaptured;
CScrollView::OnLButtonDown(nFlags, point);
}
我在onLbuttonDown 设标志,在ondraw 里画,可是响应非常慢,大家帮我看看怎么回事void CLabel2View::OnDraw(CDC* pDC)
{//// 圆已经画过/////////
CPoint point ;
GetCursorPos(&point);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
if(m_bCaptured==TRUE)
{
pDC->Rectangle(x1-20,y1-20,x2+20,y2+20);
pDC->SelectObject(&ppenOld);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
}
if(m_bCaptured1==TRUE)
{
pDC->Rectangle(x1-20,y5-20,x2+20,y6+20);
pDC->SelectObject(&ppenOld);
m_bCaptured=OnLButtonDown(MK_LBUTTON,point);
}
void CLabel2View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bCaptured){
::ReleaseCapture();
m_bCaptured=FALSE;
m_bCaptured1=FALSE;
}}
大家帮我看看或提个办法,妹妹在这里谢谢了!
解决方案 »
- 【求助】MFC创建后再同数据库连接的问题
- 关于软件注册
- Update语句中不能涉及到多个表吗?例如:update Table1 set value1=13 where Table1.value2=Table2.value2在执行时有错
- Socket编程一个问题,在线等待
- [S] 使用了IE控件的程序,当查看使用了ActiveX的页面时,IE提示是否允许与控件交互。请问怎样才能不出现这个对话框,直接允许交互?
- 分析一下这一段代码?
- 如何实现连接点事件广播,简单的DCOM实例(公司预研文档)读者进来,问题解决,承诺公布代码
- 很急,请高手帮忙啊!在线等马上结
- 用CSocket接收字符为什么会乱码
- 送100分:索求一份 实用visual c++ 6.0教程电子书
- 我现在有几个类想封装成lib
- 有关界面布局的问题
完全 没有 必要用mouse capture
在ondraw()里我试过用invalidate();不停的闪烁,可能不能用Invalidate()刷新,
不过还是谢谢你!