📄 subject_66841.htm
字号:
<p>
序号:66841 发表者:flyun 发表日期:2003-12-26 20:55:54
<br>主题:画线问题?
<br>内容:<BR>线宽、线型可以单独实现,但是如果设置线宽的话,只能实现实线的绘制,其它线型的线宽无法实现(比如:虚线,不能用一个以上的宽度绘出)。<BR><BR><BR>实现线宽的代码:<BR>void CLineStyleDlg::OnSelchangeComboLinewidth() <BR>{ UpdateData(TRUE);<BR> CMainFrame *pframe=(CMainFrame *)GetParent(); //获取框架窗口指针<BR> CMy2DCADView *pview=(CMy2DCADView *)pframe->GetActiveView(); //获取视图窗口指针<BR> pview->m_nLineWidth=m_nLineWidth;<BR>}<BR><BR>实现线型的代码:<BR>void CLineStyleDlg::OnSelchangeComboLinestyle() <BR>{<BR> UpdateData(TRUE);<BR> int linestyle; //记录线型的临时变量<BR><BR> switch(m_nLineStyle)<BR> {<BR> case 1: //点线<BR> linestyle=PS_DOT;<BR> break;<BR> case 2: //虚线<BR> linestyle=PS_DASH;<BR> break;<BR> case 3: //点划线<BR> linestyle=PS_DASHDOT;<BR> break;<BR> case 4: //双点划线<BR> linestyle=PS_DASHDOTDOT;<BR> break;<BR> default: //其他情况为实线<BR> linestyle=PS_SOLID;<BR> break;<BR> }<BR><BR> CMainFrame *pframe=(CMainFrame *)GetParent(); //获取框架窗口指针<BR> CMy2DCADView *pview=(CMy2DCADView *)pframe->GetActiveView(); //获取视图窗口指针<BR> pview->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程序设计(第五版)上册 <BR>"如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替."<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>内容:<BLOCKQUOTE>引用“第1楼”所言<BR><Q>Windows程序设计(第五版)上册 "如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替." 你要想加宽就多画几条吗,</Q></BLOCKQUOTE><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> if(dlg.DoModal()==IDOK)<BR> {<BR> COLORREF m_LineColor=dlg.GetColor();<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 23:01:02
<br>内容:<BLOCKQUOTE>引用“第3楼”所言<BR><Q> 引用“第1楼”所言 Windows程序设计(第五版)上册 "如果指定的是点画线或者虚线式画线,同时又指定一个大于1的物理宽度,那么Windows将使用实线画笔来代替." 你要想加宽就多画几条吗, //这是真的吗,第一次听说,为什么会这样,有没法解决?</Q></BLOCKQUOTE><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> CTestADODoc* pDoc = GetDocument();<BR> ASSERT_VALID(pDoc);<BR> // TODO: add draw code for native data here<BR> <BR> CPen mypen1,mypen2,*pOldPen1;;<BR> mypen1.CreatePen(PS_SOLID,5,RGB(255,0,0));// 创建一个红色的实线笔<BR> mypen2.CreatePen(PS_SOLID,5,RGB(192,192,192));//创建一个底色的实线笔<BR><BR> pOldPen1=pDC->SelectObject(&mypen1);<BR> pDC->BeginPath();<BR> pDC->MoveTo(10,10);<BR> pDC->LineTo(200,100);<BR> //用底色颜色的笔将前面的线重画,即相当于擦去<BR> pDC->SelectObject(&mypen2);<BR> pDC->MoveTo(200,10);<BR> pDC->LineTo(10,100);<BR> pDC->CloseFigure();<BR> pDC->EndPath();<BR> pDC->StrokePath();//笔划路径<BR> pDC->SelectObject(pOldPen1);//恢复系统画笔<BR> 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> // TODO: Add your message handler code here and/or call default<BR> <BR> CClientDC dc(this); //获取设备环境<BR> CPen newpen(m_nLineStyle,m_nLineWidth,m_LineColor); //创建画笔<BR> CPen *poldpen=dc.SelectObject(&newpen); //将画笔选入设备环境<BR> <BR> <BR> if(m_bIsLine) //如果程序处于画线状态<BR> {<BR> if(m_nStep==0) //如果是线段起点,则记录起点坐标<BR> {<BR> m_mStartX=point.x;<BR> m_nStartY=point.y;<BR><BR> m_nStep++;<BR> SetCapture(); //捕捉鼠标<BR> }<BR> else //如果始终点,则在视图区画出线段<BR> {<BR> dc.MoveTo(m_mStartX,m_nStartY);<BR> dc.LineTo(point.x,point.y); //用moveto,lineto函数画线<BR><BR> m_nStep=0; //完成一次画线后,归零<BR> m_mStartX=m_nStartY=0; //将坐标归零<BR> <BR> m_nEndX=m_nEndY=0;<BR><BR> ::ReleaseCapture(); //释放鼠标捕捉<BR> }<BR> }<BR> dc.SelectObject(poldpen); //落选画笔<BR> CScrollView::OnLButtonDown(nFlags, point);<BR>}<BR><BR><BR>这是调颜色的:(设了一个按钮(ID_COLOR),如图)<BR>void CLineStyleDlg::OnColor() <BR>{<BR> <BR> CColorDialog dlg; //声明一个颜色对话框类对象<BR> if(dlg.DoModal()==IDOK)<BR> {<BR> COLORREF m_LineColor=dlg.GetColor();<BR> }<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>内容:<BLOCKQUOTE>引用“第9楼”所言<BR><Q>你是怎样将COLORREF m_LineColor 得到的值传给 CPen newpen(m_nLineStyle,m_nLineWidth,m_LineColor); //创建画笔 中的<BR>m_LineColor??</Q></BLOCKQUOTE><BR><BR>//就是这的问题,怎么传啊?这代码该怎么写?<BR><BR><q>这是调颜色的:(设了一个按钮(ID_COLOR),如图)<BR>void CLineStyleDlg::OnColor() <BR>{<BR> <BR> CColorDialog dlg; //声明一个颜色对话框类对象<BR> if(dlg.DoModal()==IDOK)<BR> {<BR> COLORREF m_LineColor=dlg.GetColor();<BR> }<BR>}<BR></q>
<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,<q>CLineStyleDlg.m_LineColor</q>); <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 + -