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

📄 subject_66841.htm

📁 vc
💻 HTM
字号:
<p>
序号:66841 发表者:flyun 发表日期:2003-12-26 20:55:54
<br>主题:画线问题?
<br>内容:<BR>线宽、线型可以单独实现,但是如果设置线宽的话,只能实现实线的绘制,其它线型的线宽无法实现(比如:虚线,不能用一个以上的宽度绘出)。<BR><BR><BR>实现线宽的代码:<BR>void CLineStyleDlg::OnSelchangeComboLinewidth() <BR>{&nbsp;&nbsp; UpdateData(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMainFrame *pframe=(CMainFrame *)GetParent(); //获取框架窗口指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMy2DCADView *pview=(CMy2DCADView *)pframe-&gt;GetActiveView();&nbsp;&nbsp;//获取视图窗口指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;pview-&gt;m_nLineWidth=m_nLineWidth;<BR>}<BR><BR>实现线型的代码:<BR>void CLineStyleDlg::OnSelchangeComboLinestyle() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int linestyle;&nbsp;&nbsp;//记录线型的临时变量<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;switch(m_nLineStyle)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 1:&nbsp;&nbsp;&nbsp;&nbsp;//点线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linestyle=PS_DOT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 2:&nbsp;&nbsp;&nbsp;&nbsp;//虚线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linestyle=PS_DASH;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 3:&nbsp;&nbsp;&nbsp;&nbsp;//点划线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linestyle=PS_DASHDOT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 4:&nbsp;&nbsp;&nbsp;&nbsp;//双点划线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linestyle=PS_DASHDOTDOT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;//其他情况为实线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linestyle=PS_SOLID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CMainFrame *pframe=(CMainFrame *)GetParent(); //获取框架窗口指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMy2DCADView *pview=(CMy2DCADView *)pframe-&gt;GetActiveView();&nbsp;&nbsp;//获取视图窗口指针<BR>&nbsp;&nbsp; pview-&gt;m_nLineStyle=linestyle; //访问视图类的成员变量并赋值<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>
回复者:kobo 回复日期:2003-12-26 21:41:56
<br>内容:Windows程序设计(第五版)上册&nbsp;&nbsp;<BR>&#34;如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替.&#34;<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>
回复者:hurtmanzc 回复日期:2003-12-26 21:44:05
<br>内容:<BR>Pens that have a width greater than 1 pixel should always have either the PS_NULL, PS_SOLID, or PS_INSIDEFRAME style. 
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:flyun 回复日期:2003-12-26 22:28:15
<br>内容:&lt;BLOCKQUOTE&gt;引用“第1楼”所言<BR>&lt;Q&gt;Windows程序设计(第五版)上册&nbsp;&nbsp;&nbsp;&nbsp;&#34;如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替.&#34;&nbsp;&nbsp;&nbsp;&nbsp;你要想加宽就多画几条吗,&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<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>
回复者:flyun 回复日期:2003-12-26 22:32:55
<br>内容:另怎么给线条加上颜色,我是调用系统颜色对话框,可调出来后,怎么实现让线条变色。<BR>CColorDialog dlg; //声明一个颜色对话框类对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(dlg.DoModal()==IDOK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COLORREF m_LineColor=dlg.GetColor();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hurtmanzc 回复日期:2003-12-26 23:01:02
<br>内容:&lt;BLOCKQUOTE&gt;引用“第3楼”所言<BR>&lt;Q&gt;&nbsp;&nbsp;引用“第1楼”所言&nbsp;&nbsp;Windows程序设计(第五版)上册&nbsp;&nbsp;&nbsp;&nbsp;&#34;如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替.&#34;&nbsp;&nbsp;&nbsp;&nbsp;你要想加宽就多画几条吗,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这是真的吗,第一次听说,为什么会这样,有没法解决?&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR><BR>msdn中也这么说<BR><BR>得到颜色值后再创建笔<BR>BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor );<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>
<font color=red>答案被接受</font><br>回复者:kobo 回复日期:2003-12-26 23:53:17
<br>内容:可将RGB(255,0,0)换成你要的颜色<BR>void CTestADOView::OnDraw(CDC* pDC)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTestADODoc* pDoc = GetDocument();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pDoc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: add draw code for native data here<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen mypen1,mypen2,*pOldPen1;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypen1.CreatePen(PS_SOLID,5,RGB(255,0,0));// 创建一个红色的实线笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypen2.CreatePen(PS_SOLID,5,RGB(192,192,192));//创建一个底色的实线笔<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pOldPen1=pDC-&gt;SelectObject(&amp;mypen1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;BeginPath();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(10,10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(200,100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//用底色颜色的笔将前面的线重画,即相当于擦去<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(&amp;mypen2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(200,10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(10,100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;CloseFigure();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;EndPath();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;StrokePath();//笔划路径<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(pOldPen1);//恢复系统画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;CWnd::ReleaseDC(pDC);<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>
回复者:flyun 回复日期:2003-12-27 00:36:37
<br>内容:楼上的代码是系统在制定的坐标自己画线,我是想用鼠标自己随意画线。下面是画线的部分代码:<BR><BR>void CMy2DCADView::OnLButtonDown(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;CClientDC dc(this); //获取设备环境<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen newpen(m_nLineStyle,m_nLineWidth,m_LineColor); //创建画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen *poldpen=dc.SelectObject(&amp;newpen);&nbsp;&nbsp;//将画笔选入设备环境<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_bIsLine)&nbsp;&nbsp; //如果程序处于画线状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(m_nStep==0)&nbsp;&nbsp;//如果是线段起点,则记录起点坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_mStartX=point.x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nStartY=point.y;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nStep++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCapture();&nbsp;&nbsp;//捕捉鼠标<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&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;dc.MoveTo(m_mStartX,m_nStartY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.LineTo(point.x,point.y);&nbsp;&nbsp;//用moveto,lineto函数画线<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nStep=0;&nbsp;&nbsp;//完成一次画线后,归零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_mStartX=m_nStartY=0;&nbsp;&nbsp;//将坐标归零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nEndX=m_nEndY=0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::ReleaseCapture(); //释放鼠标捕捉<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.SelectObject(poldpen); //落选画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;CScrollView::OnLButtonDown(nFlags, point);<BR>}<BR><BR><BR>这是调颜色的:(设了一个按钮(ID_COLOR),如图)<BR>void CLineStyleDlg::OnColor() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CColorDialog dlg; //声明一个颜色对话框类对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(dlg.DoModal()==IDOK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COLORREF m_LineColor=dlg.GetColor();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR><BR>可就是没法让线改变颜色,只能显示RGB初始化是的颜色,变色无用。不知是哪的毛病
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:flyun 回复日期:2003-12-27 00:59:38
<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>
回复者:kobo 回复日期:2003-12-27 01:09:51
<br>内容:你是怎样将COLORREF m_LineColor 得到的值传给 CPen newpen(m_nLineStyle,m_nLineWidth,m_LineColor); //创建画笔<BR>中的m_LineColor??<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>
回复者:flyun 回复日期:2003-12-27 09:11:29
<br>内容:&lt;BLOCKQUOTE&gt;引用“第9楼”所言<BR>&lt;Q&gt;你是怎样将COLORREF m_LineColor 得到的值传给 CPen newpen(m_nLineStyle,m_nLineWidth,m_LineColor); //创建画笔&nbsp;&nbsp;中的<BR>m_LineColor??&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR><BR>//就是这的问题,怎么传啊?这代码该怎么写?<BR><BR>&lt;q&gt;这是调颜色的:(设了一个按钮(ID_COLOR),如图)<BR>void CLineStyleDlg::OnColor() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CColorDialog dlg; //声明一个颜色对话框类对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(dlg.DoModal()==IDOK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COLORREF m_LineColor=dlg.GetColor();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>&lt;/q&gt;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:flyun 回复日期:2003-12-27 13:03:37
<br>内容:终于好了,改CPen newpe(m_nLineStyle,m_nLineWidth,&lt;q&gt;CLineStyleDlg.m_LineColor&lt;/q&gt;); <BR>颜色就可以传过去了。<BR><BR>谢谢大家帮忙。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

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