MFC绘制直线
初学MFC,照着孙鑫老师的视频来的,为什么在绘制直线的时候,我的都是鼠标拖动完成之后没有反应,而需要鼠标再点击一下才会出现一条直线,也就是说onLbuttonup没有响应...
初学MFC,照着孙鑫老师的视频来的,为什么在绘制直线的时候,我的都是鼠标拖动完成之后没有反应,而需要鼠标再点击一下才会出现一条直线,也就是说onLbuttonup没有响应吧,可是完全是按照孙鑫老师的来的,都重改了好多遍了还是这种问题。实在搞不懂了,请教给位!谢谢了!部分程序如下:(每种用/* */标记起来的都是一种实现方法,可以用其中的任何一种)
CDrawView::CDrawView()
{// TODO: add construction code here
m_ptOrigin=0;
}
CDrawView::~CDrawView()
{
}
BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView drawing
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView printing
BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView diagnostics
#ifdef _DEBUG
void CDrawView::AssertValid() const
{
CView::AssertValid();
}
void CDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDrawDoc* CDrawView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDrawView message handlers
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin=point;
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
/*HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
/*CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);*/
/*CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
CView::OnLButtonUp(nFlags, point);
} 展开
CDrawView::CDrawView()
{// TODO: add construction code here
m_ptOrigin=0;
}
CDrawView::~CDrawView()
{
}
BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView drawing
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView printing
BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDrawView diagnostics
#ifdef _DEBUG
void CDrawView::AssertValid() const
{
CView::AssertValid();
}
void CDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDrawDoc* CDrawView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDrawView message handlers
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin=point;
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
/*HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
/*CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);*/
/*CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
CView::OnLButtonUp(nFlags, point);
} 展开
展开全部
这样试试:
public:
CMFC练习Doc* GetDocument() const;
CPoint startpoint; //起始点
RECT rcOldClip; //原先的鼠标活动区域
//在头文件中声明
void CMFC练习View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
GetClipCursor(&rcOldClip); // 获得原鼠标活动的有效区域
startpoint=point; //鼠标所在点为起始点
SetCapture(); //进行鼠标捕捉
CView::OnLButtonDown(nFlags, point);
}
void CMFC练习View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ClipCursor(&rcOldClip); //恢复原来的鼠标活动区
ReleaseCapture(); //释放鼠标捕捉
CView::OnLButtonUp(nFlags, point);
}
void CMFC练习View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this); //获得DC
HCURSOR cusor; //鼠标光标句柄
RECT rcClip; //限值矩形区域
if((nFlags&MK_LBUTTON)==MK_LBUTTON) //移动鼠标左键时是按下的
{
GetWindowRect(&rcClip); //获得客户去窗口区域
ClipCursor(&rcClip); //将鼠标的移动限制在客户区
if((nFlags&MK_CONTROL) !=MK_CONTROL) //ctrl键没有按下
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_CROSS); //载入标准十字光标
SetCursor(cusor); //使用新光标
dc.MoveTo(startpoint.x,startpoint.y); //开始画线
dc.LineTo(point.x,point.y);
startpoint=point;
}
else
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_SIZENS); //载入标准箭头光标
SetCursor(cusor); //使用光标
CBrush mybrush(RGB(0,0,255)); //生成刷子
CBrush *oldbrush; //原刷子指针
oldbrush=dc.SelectObject(&mybrush); //将刷子选入设备,并返回原刷子指针
dc.Rectangle(startpoint.x,startpoint.y,point.x,point.y); //绘制矩形
dc.SelectObject(oldbrush); //恢复原有刷子
}
}
CView::OnMouseMove(nFlags, point);
}
public:
CMFC练习Doc* GetDocument() const;
CPoint startpoint; //起始点
RECT rcOldClip; //原先的鼠标活动区域
//在头文件中声明
void CMFC练习View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
GetClipCursor(&rcOldClip); // 获得原鼠标活动的有效区域
startpoint=point; //鼠标所在点为起始点
SetCapture(); //进行鼠标捕捉
CView::OnLButtonDown(nFlags, point);
}
void CMFC练习View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ClipCursor(&rcOldClip); //恢复原来的鼠标活动区
ReleaseCapture(); //释放鼠标捕捉
CView::OnLButtonUp(nFlags, point);
}
void CMFC练习View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this); //获得DC
HCURSOR cusor; //鼠标光标句柄
RECT rcClip; //限值矩形区域
if((nFlags&MK_LBUTTON)==MK_LBUTTON) //移动鼠标左键时是按下的
{
GetWindowRect(&rcClip); //获得客户去窗口区域
ClipCursor(&rcClip); //将鼠标的移动限制在客户区
if((nFlags&MK_CONTROL) !=MK_CONTROL) //ctrl键没有按下
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_CROSS); //载入标准十字光标
SetCursor(cusor); //使用新光标
dc.MoveTo(startpoint.x,startpoint.y); //开始画线
dc.LineTo(point.x,point.y);
startpoint=point;
}
else
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_SIZENS); //载入标准箭头光标
SetCursor(cusor); //使用光标
CBrush mybrush(RGB(0,0,255)); //生成刷子
CBrush *oldbrush; //原刷子指针
oldbrush=dc.SelectObject(&mybrush); //将刷子选入设备,并返回原刷子指针
dc.Rectangle(startpoint.x,startpoint.y,point.x,point.y); //绘制矩形
dc.SelectObject(oldbrush); //恢复原有刷子
}
}
CView::OnMouseMove(nFlags, point);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
DFRobot
2024-11-10 广告
2024-11-10 广告
图形化编程是一种直观的编程方式,它通过拖拽图形化的编程积木来构建程序,降低了编程的学习门槛。在上海智位机器人股份有限公司,我们致力于将图形化编程应用于机器人教育等领域,使学习者能够以更加轻松、有趣的方式掌握编程技能。我们的图形化编程平台界面...
点击进入详情页
本回答由DFRobot提供
展开全部
m_ptOrigin,看现在这个变量是不是CPoint类型。光这看不问题的。
或者你按我的步骤试一试:
1,建立好工程后,项目,类向导,view内中添加UP,DOWN消息。
2,右键点击view类,添加CPoint类型变量m_ptOrigin。
3,down中 ,point = m_ptOrigin。
4,up中,CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
或者你按我的步骤试一试:
1,建立好工程后,项目,类向导,view内中添加UP,DOWN消息。
2,右键点击view类,添加CPoint类型变量m_ptOrigin。
3,down中 ,point = m_ptOrigin。
4,up中,CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询