⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_24666.htm

📁 一些关于vc的问答
💻 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>&nbsp;&nbsp;&nbsp;&nbsp;CImageDoc* pDoc = GetDocument();<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 指向DIB的指针&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPSTR&nbsp;&nbsp;&nbsp;&nbsp;lpDIB;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPSTR&nbsp;&nbsp;&nbsp;&nbsp;lpDIBBits;<BR>&nbsp;&nbsp;<BR>// Byte number of each line of the image<BR>&nbsp;&nbsp;&nbsp;&nbsp;LONG lLineBytes;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 锁定DIB<BR>&nbsp;&nbsp;&nbsp;&nbsp;lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc-&gt;GetHDIB());<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Byte number of each line of the image<BR>&nbsp;&nbsp;&nbsp;&nbsp;lLineBytes = WIDTHBYTES(::DIBWidth(lpDIB) * 8);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 找到DIB图像象素起始位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;lpDIBBits = ::FindDIBBits(lpDIB);<BR><BR>&nbsp;&nbsp;CPen pen(PS_SOLID,2,RGB(0,0,0));<BR><BR>&nbsp;&nbsp;CScrollView::OnLButtonDown(nFlags, point);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 获取文档<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC dc(this); <BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen * pOldPen=dc.SelectObject(&amp;pen);<BR>&nbsp;&nbsp; <BR><BR>if(m_DrawCurrent==1)&nbsp;&nbsp;&nbsp;&nbsp;//如果正在绘制直线<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(PushNumb==0)&nbsp;&nbsp;&nbsp;&nbsp; //如果是第一次按下左鼠标键<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //做标记表示按下鼠标左键一次<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PushNumb++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPointOrign=point;&nbsp;&nbsp;&nbsp;&nbsp;//直线的第一点等于点中点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPointOld=point;&nbsp;&nbsp;&nbsp;&nbsp;//记录本次点中点<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCapture();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(PushNumb==1) //第二次按下左鼠标键(即按下直线的结束点时)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;mx1=mPointOrign.x;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;my1=mPointOrign.y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;my1=::DIBHeight(lpDIB)-mPointOrign.y;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;mx2=point.x;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;my2=point.y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;my2=::DIBHeight(lpDIB)-point.y; //transfer into image coordinate<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc.MoveTo(mx1,my1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc.LineTo(mx2,my2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PushNumb=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReleaseCapture();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>// only process 256bit bitmap, if not return false<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (::DIBNumColors(lpDIB) != 256)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 提示用户<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox("only process 256bit bitmap", "系统提示" , MB_ICONINFORMATION | MB_OK);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 解除锁定<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock((HGLOBAL) pDoc-&gt;GetHDIB());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 返回<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 更改光标形状<BR>&nbsp;&nbsp;&nbsp;&nbsp;BeginWaitCursor();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置脏标记<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDoc-&gt;SetModifiedFlag(TRUE);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 更新视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDoc-&gt;UpdateAllViews(NULL);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 解除锁定<BR>&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock((HGLOBAL) pDoc-&gt;GetHDIB());<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 恢复光标<BR>&nbsp;&nbsp;&nbsp;&nbsp;EndWaitCursor();<BR><BR>}<BR><BR><BR>void CImageView::OnRoadFinding() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;PushNumb=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_DrawCurrent=1;&nbsp;&nbsp;&nbsp;&nbsp;//标识进行直线绘制操作<BR><BR>}<BR><BR>void CImageView::OnRButtonDown(UINT nFlags, CPoint point) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your message handler code here and/or call default<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CScrollView::OnRButtonDown(nFlags, point);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CImageDoc* pDoc = GetDocument();<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC ddd(this);<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen pen(PS_SOLID,2,RGB(0,0,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen * pOldPen=ddd.SelectObject(&amp;pen);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;ddd.SetROP2(R2_NOT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置反色的绘画模式<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_DrawCurrent==1&amp;&amp;PushNumb==1)&nbsp;&nbsp;&nbsp;&nbsp;//如果正在绘制直线并且已经按下了起点<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将直线从屏幕上擦除并使绘制处于起始状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.MoveTo(mPointOrign);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.LineTo(mPointOld);&nbsp;&nbsp;//擦除屏幕上的拖动线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PushNumb=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //结束绘制<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseCapture();&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<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>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnMouseMove(nFlags, point);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CImageDoc* pDoc = GetDocument();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC ddd(this); <BR><BR>&nbsp;&nbsp;CPen pen(PS_SOLID,2,RGB(0,0,0));<BR>&nbsp;&nbsp;CPen * pOldPen=ddd.SelectObject(&amp;pen);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;ddd.SetROP2(R2_NOT);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_DrawCurrent==1&amp;&amp;PushNumb==1)//如果是绘制直线并且已经按下第一点<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mPointOld!=point)//如果鼠标的现在移动点与上一个点不相同<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将起点到上一个移动点的直线擦除,绘制从起点到现在移动点的直线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.MoveTo(mPointOrign); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.LineTo(mPointOld);&nbsp;&nbsp;//擦除上一条线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.MoveTo(mPointOrign);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ddd.LineTo(point);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//画到鼠标移动点的直线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPointOld=point;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<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> 用&nbsp;&nbsp;ddd.LineTo(point);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//画到鼠标移动点的直线<BR>画出最后的线。<BR><BR><BR>那你说怎么改<BR>2002-12-15 11:35:45

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -