在屏幕中画一个矩形,如果在矩形外单击鼠标左键,把矩形移到单击的位置
2个回答
展开全部
首先利用MFC AppWizard[exe]向导创建一个单文档应用程序DrawRectangle,然后为视图类CDrawRectangleView添加两个成员变量:
protected:
CPoint topLeft;
CPoint bottomRight;
分别用来表示矩形的左上顶点和右下顶点。
在CDrawRectangleView::CDrawRectangleView()中对它们进行初始化:
topLeft.x = topLeft.y = 150;
bottomRight.x = bottomRight.y = 300;
当然你可以初始化为其他值。
在void CDrawRectangleView::OnDraw(CDC* pDC)中添加下面两行代码:
// TODO: add draw code for native data here
CRect rect(topLeft, bottomRight);
pDC->Rectangle(&rect);
用来在窗口中显示一个矩形。
然后添加消息处理函数WM_LBUTTONDOWN,编写如下代码:
void CDrawRectangleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPoint temp1 = point - topLeft; //当前位置减去矩形左上角坐标
CPoint temp2 = point - bottomRight; //当前位置减去矩形右下角坐标
if (temp1.x < 0 || temp1.y < 0 || temp2.x > 0 || temp2.y > 0) //不在矩形区域内
{
topLeft = point; //矩形左上角为当前鼠标位置
bottomRight += temp1; //矩形右下角加上偏移量
Invalidate(TRUE); //刷新视图
}
CView::OnLButtonDown(nFlags, point);
}
编译、运行程序就行了。
当然你还可以结合一楼的写法,把上面的消息处理函写成下面的形式:
void CDrawRectangleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPoint temp = point - topLeft;
CRect rect(topLeft, bottomRight);
if (!PtInRect(&rect, point))
{
topLeft = point;
bottomRight += temp;
Invalidate(TRUE);
}
CView::OnLButtonDown(nFlags, point);
}
protected:
CPoint topLeft;
CPoint bottomRight;
分别用来表示矩形的左上顶点和右下顶点。
在CDrawRectangleView::CDrawRectangleView()中对它们进行初始化:
topLeft.x = topLeft.y = 150;
bottomRight.x = bottomRight.y = 300;
当然你可以初始化为其他值。
在void CDrawRectangleView::OnDraw(CDC* pDC)中添加下面两行代码:
// TODO: add draw code for native data here
CRect rect(topLeft, bottomRight);
pDC->Rectangle(&rect);
用来在窗口中显示一个矩形。
然后添加消息处理函数WM_LBUTTONDOWN,编写如下代码:
void CDrawRectangleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPoint temp1 = point - topLeft; //当前位置减去矩形左上角坐标
CPoint temp2 = point - bottomRight; //当前位置减去矩形右下角坐标
if (temp1.x < 0 || temp1.y < 0 || temp2.x > 0 || temp2.y > 0) //不在矩形区域内
{
topLeft = point; //矩形左上角为当前鼠标位置
bottomRight += temp1; //矩形右下角加上偏移量
Invalidate(TRUE); //刷新视图
}
CView::OnLButtonDown(nFlags, point);
}
编译、运行程序就行了。
当然你还可以结合一楼的写法,把上面的消息处理函写成下面的形式:
void CDrawRectangleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPoint temp = point - topLeft;
CRect rect(topLeft, bottomRight);
if (!PtInRect(&rect, point))
{
topLeft = point;
bottomRight += temp;
Invalidate(TRUE);
}
CView::OnLButtonDown(nFlags, point);
}
展开全部
先要设定他的Rect,比如 是 Rect rc1;
那么画出来就是 :
CDC* pDC = GetDC();
pDC->Rectangle( &rc1 );
ReleaseDC( pDC );
在鼠标单击消息中做如下处理:
POINT pt;
GetCursorPos( &pt );
if ( !PtInRect( &rc1, pt ) ) // 不在这个范围
{
// 重新设定rc1;
pDC->Rectangle( &rc1 ); // 重画新的RECT
}
那么画出来就是 :
CDC* pDC = GetDC();
pDC->Rectangle( &rc1 );
ReleaseDC( pDC );
在鼠标单击消息中做如下处理:
POINT pt;
GetCursorPos( &pt );
if ( !PtInRect( &rc1, pt ) ) // 不在这个范围
{
// 重新设定rc1;
pDC->Rectangle( &rc1 ); // 重画新的RECT
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询