📄 subject_24666.htm
字号:
<p>
序号:24666 发表者:uswrs 发表日期:2002-12-15 08:17:59
<br>主题:画线问题继续
<br>内容:在图像上画线,点第一下鼠标,然后移动鼠标,这时可以<BR>看到线,然而,再点下鼠标,想画线时,什么都没有,刚才<BR>可以看到的线也没有了,这是怎么会事。请各位高手指点。<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:太平冰水 回复日期:2002-12-15 10:43:27
<br>内容:想画线时,什么都没有,代码写错了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:uswrs 回复日期:2002-12-15 10:58:09
<br>内容:代码没错。在空白视图区(没有读影象的),可以画线。<BR><BR>void CImageView::OnLButtonDown(UINT nFlags, CPoint point) <BR>{<BR> CImageDoc* pDoc = GetDocument();<BR> // 指向DIB的指针 <BR> LPSTR lpDIB;<BR> LPSTR lpDIBBits;<BR> <BR>// Byte number of each line of the image<BR> LONG lLineBytes;<BR><BR> // 锁定DIB<BR> lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());<BR><BR> // Byte number of each line of the image<BR> lLineBytes = WIDTHBYTES(::DIBWidth(lpDIB) * 8);<BR><BR> // 找到DIB图像象素起始位置<BR> lpDIBBits = ::FindDIBBits(lpDIB);<BR><BR> CPen pen(PS_SOLID,2,RGB(0,0,0));<BR><BR> CScrollView::OnLButtonDown(nFlags, point);<BR><BR> // 获取文档<BR><BR> CClientDC dc(this); <BR> CPen * pOldPen=dc.SelectObject(&pen);<BR> <BR><BR>if(m_DrawCurrent==1) //如果正在绘制直线<BR> {<BR> if(PushNumb==0) //如果是第一次按下左鼠标键<BR> {<BR> //做标记表示按下鼠标左键一次<BR> PushNumb++;<BR> mPointOrign=point; //直线的第一点等于点中点<BR> mPointOld=point; //记录本次点中点<BR> <BR> SetCapture();<BR> <BR> }<BR> else if(PushNumb==1) //第二次按下左鼠标键(即按下直线的结束点时)<BR> {<BR><BR><BR> mx1=mPointOrign.x;<BR>// my1=mPointOrign.y;<BR> my1=::DIBHeight(lpDIB)-mPointOrign.y;<BR><BR> mx2=point.x;<BR>// my2=point.y;<BR> my2=::DIBHeight(lpDIB)-point.y; //transfer into image coordinate<BR> <BR> dc.MoveTo(mx1,my1);<BR> dc.LineTo(mx2,my2);<BR> PushNumb=0;<BR> ReleaseCapture();<BR> <BR> }<BR><BR> }<BR><BR>// only process 256bit bitmap, if not return false<BR> if (::DIBNumColors(lpDIB) != 256)<BR> {<BR> // 提示用户<BR> MessageBox("only process 256bit bitmap", "系统提示" , MB_ICONINFORMATION | MB_OK);<BR><BR> // 解除锁定<BR> ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());<BR> <BR> // 返回<BR> return;<BR> }<BR> <BR> // 更改光标形状<BR> BeginWaitCursor();<BR><BR> // 设置脏标记<BR> pDoc->SetModifiedFlag(TRUE);<BR><BR> // 更新视图<BR> pDoc->UpdateAllViews(NULL);<BR><BR> <BR> // 解除锁定<BR> ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());<BR><BR> // 恢复光标<BR> EndWaitCursor();<BR><BR>}<BR><BR><BR>void CImageView::OnRoadFinding() <BR>{<BR> PushNumb=0;<BR> m_DrawCurrent=1; //标识进行直线绘制操作<BR><BR>}<BR><BR>void CImageView::OnRButtonDown(UINT nFlags, CPoint point) <BR>{<BR> // TODO: Add your message handler code here and/or call default<BR> <BR> CScrollView::OnRButtonDown(nFlags, point);<BR><BR><BR> CImageDoc* pDoc = GetDocument();<BR> CClientDC ddd(this);<BR> <BR> CPen pen(PS_SOLID,2,RGB(0,0,0));<BR> CPen * pOldPen=ddd.SelectObject(&pen);<BR><BR> ddd.SetROP2(R2_NOT); //设置反色的绘画模式<BR> if(m_DrawCurrent==1&&PushNumb==1) //如果正在绘制直线并且已经按下了起点<BR> {<BR> //将直线从屏幕上擦除并使绘制处于起始状态<BR> ddd.MoveTo(mPointOrign);<BR> ddd.LineTo(mPointOld); //擦除屏幕上的拖动线<BR> PushNumb=0; //结束绘制<BR> ReleaseCapture(); <BR><BR> }<BR><BR><BR> ddd.SelectObject(pOldPen);<BR><BR><BR>}<BR><BR><BR>void CImageView::OnMouseMove(UINT nFlags, CPoint point) <BR>{<BR>// TODO: Add your message handler code here and/or call default<BR> <BR> CView::OnMouseMove(nFlags, point);<BR><BR> CImageDoc* pDoc = GetDocument();<BR><BR> CClientDC ddd(this); <BR><BR> CPen pen(PS_SOLID,2,RGB(0,0,0));<BR> CPen * pOldPen=ddd.SelectObject(&pen);<BR><BR> ddd.SetROP2(R2_NOT);<BR><BR> if(m_DrawCurrent==1&&PushNumb==1)//如果是绘制直线并且已经按下第一点<BR> {<BR> if(mPointOld!=point)//如果鼠标的现在移动点与上一个点不相同<BR> //将起点到上一个移动点的直线擦除,绘制从起点到现在移动点的直线<BR> {<BR> ddd.MoveTo(mPointOrign); <BR> ddd.LineTo(mPointOld); //擦除上一条线<BR> ddd.MoveTo(mPointOrign);<BR> ddd.LineTo(point); //画到鼠标移动点的直线<BR> mPointOld=point; <BR> }<BR> }<BR><BR>}<BR><BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2002-12-15 11:09:20
<br>内容:<BR>//擦除上一条线 ???<BR>OnMouseMove()中为什么要擦除,这样岂不是全都擦除
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:uswrs 回复日期:2002-12-15 11:27:36
<br>内容:不擦除的话,当移动鼠标时,会画出很多线。、<BR> 用 ddd.LineTo(point); //画到鼠标移动点的直线<BR>画出最后的线。<BR><BR><BR>那你说怎么改<BR>2002-12-15 11:35:45
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -