小弟我想做一个鼠标画图程序,可是在画线的时候,总是画一条新线就把原来的旧线刷新了。相关代码如下:
void CE1View::OnLButtonDown(UINT nFlags, CPoint point)
{
bCaptured=FALSE;
m_pointFirst=point;
CView::OnLButtonDown(nFlags, point);
}void CE1View::OnMouseMove(UINT nFlags, CPoint point)
{
if(!bCaptured){
CDC* pDC = GetDC();
OnPrepareDC(pDC);
Invalidate();
UpdateWindow();
pDC->MoveTo(m_pointFirst.x,m_pointFirst.y);
pDC->LineTo(point.x,point.y); ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}void CE1View::OnLButtonUp(UINT nFlags, CPoint point)
{
bCaptured=TRUE;
m_pointSecond=point;
// drawline(m_pointFirst,m_pointSecond);
CView::OnLButtonUp(nFlags, point);
}
请高手们多多指教!
void CE1View::OnLButtonDown(UINT nFlags, CPoint point)
{
bCaptured=FALSE;
m_pointFirst=point;
CView::OnLButtonDown(nFlags, point);
}void CE1View::OnMouseMove(UINT nFlags, CPoint point)
{
if(!bCaptured){
CDC* pDC = GetDC();
OnPrepareDC(pDC);
Invalidate();
UpdateWindow();
pDC->MoveTo(m_pointFirst.x,m_pointFirst.y);
pDC->LineTo(point.x,point.y); ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}void CE1View::OnLButtonUp(UINT nFlags, CPoint point)
{
bCaptured=TRUE;
m_pointSecond=point;
// drawline(m_pointFirst,m_pointSecond);
CView::OnLButtonUp(nFlags, point);
}
请高手们多多指教!
解决方案 »
- 串口通信 总是读不到数据呢?
- 没有使用MFC 的 ATL 控件如何在没有使用MFC 的软件中创建显示?
- 谁知道这个函数?
- 关于CCheckListBox的插入数据和显示问题(急啊)
- 用MFC向导做一个模式对话框程序,对话框类的构造函数第二个参数CWnd* pParentWnd为空值,当调用DoModal函数时为什么又有了父类窗口句柄?
- 求教一个关于“停车场管理”的算法
- 谁用过这个函数?SQLConfigDataSource
- 急!!!连接informix数据库,已经赋了用户名,密码,但还是出现连接数据库对话框,怎么去掉,解决就给分
- 串口监听(高分救急)
- 在installshield中,如何改变welcome对话框的左边的图片?
- 刚做好的编程技术文章系统,欢迎来翻阅技术文章.
- 添加记录是与到的古怪问题!!!!!!!!!
[email protected]
在按下的时候告诉系统开始画图,调用直线类的NewPoint函数
来确定直线的起点
在移动过程中要调用直线类的MoveAt函数注意:这个函数要用异或笔来画,
在抬起时再做一些相关操作
自己写代码吧
{
bCaptured=FALSE;
m_pointFirst=point;
CView::OnLButtonDown(nFlags, point);
}void CE1View::OnMouseMove(UINT nFlags, CPoint point)
{
if(!bCaptured){
CDC* pDC = GetDC();
OnPrepareDC(pDC);
//UpdateWindow();
pDC->MoveTo(m_pointFirst.x,m_pointFirst.y);
pDC->LineTo(point.x,point.y); Invalidate(); ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}void CE1View::OnLButtonUp(UINT nFlags, CPoint point)
{
bCaptured=TRUE;
m_pointSecond=point;
// drawline(m_pointFirst,m_pointSecond);
CView::OnLButtonUp(nFlags, point);
}
try again
所以上次画的图,也被消掉,如果还想要保留上次
的线,必须将上次画图的代码在CView::OnDraw()
中体现出来.若不这样,不仅再次画图时,上次的图
会消失,而且当窗口发生变化时,它也会消失.
{
// TODO: Add your message handler code here and/or call default
m_lbtdown = true;//mouse down
startpoint=point;//起始为mouse down 的 point
oldpoint=startpoint;
CScrollView::OnLButtonDown(nFlags, point);
}void CRpwt2View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default if(m_lbtdown)
{
int oldmode;
endpoint=point;
CClientDC*pDC = new CClientDC(this);
if (m_drawtype == 1)
{
oldmode = pDC->GetROP2();
pDC->SetROP2(R2_NOT);
pDC->MoveTo(startpoint);
pDC->LineTo(oldpoint);
pDC->MoveTo(startpoint);
pDC->LineTo(point);
oldpoint=point;
pDC->SetROP2(oldmode);
}
delete pDC;
}
CScrollView::OnMouseMove(nFlags, point);
}
鼠标任意拖动的效果
COLORREF XorColor=pDC->BkColor() ^ "笔色";
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);