本人从USB口接到数据,并绘图显示。需要绘制几条曲线,于是定义了几个cdc,如CDC * c1 = GetDC();c2,c2...
再分别定义了相应的画笔,再分别moveTo,LineTo。
最后发现问题,一条曲线最后总是moveTo了另外曲线的起始位置,请问什么原因?
画笔问题么,还是CDC定义的问题,抑或其他呢?
谢谢
再分别定义了相应的画笔,再分别moveTo,LineTo。
最后发现问题,一条曲线最后总是moveTo了另外曲线的起始位置,请问什么原因?
画笔问题么,还是CDC定义的问题,抑或其他呢?
谢谢
几条曲线只是几个数据缓冲区而已
pdc.selectObject(&pen1);
//Draw with pen1
pdc.selectObject(&pen2);
//Draw with pen2
....
但是我要画很多曲线,每次都要选择画笔很麻烦,能不能先选择好画笔呢?
于是我就定义了几个CDC,先为每个选择好画笔.听你说好像不行啊?
选择画笔1
画曲线1
.........
选择画笔n
画曲线n
如果你的数据安排得恰当,一个循环就搞定,代码就简单明了了
而且画笔你可以定义类的数组,在程序初始化的地方就创建好for(int i=0;i<n;i++)
{
选择画笔i
画曲线i
}
你每次moveto时,要记录以前鼠标所在的位置,lineto完成后,再moveto回去恢复设备的环境!
没用多线程,对vc多线程不大熟。一个CDC的话很麻烦,我要画9条先,每次都要moveTo下条线的起始位置,太麻烦了。
还有我每次运行完程序关闭时,总是出现Debug Assertion Failed。错误,好像是内存泄露。我定义的9个CDC没有释放(我在InitDialog中初始化他的)因为我不知道在哪释放?画图过程中都要用到。请问怎么做呢?
我也是这个意思,UI处理本身就是个线程,所以绘图应该在WM_PAIN中绘图。
VC MFC 应该是在 OnPaint 函数中。CPaintDC dc (this);
CPen pen(PS_SOLID, 1, 0xff0000); //红色画笔
CPen* pOld = dc.SelectObject (&pen);//-----------------------------
//在这里画图
//-----------------------------dc.SelectObject (pOld);//以上代码没有调试,差不多就是这样一个结构。
画图的话,建议你使用微软的新标准 GDI+GDI之所以还存在是为了保持与老程序的兼容。新开发的程序应该使用GDI+。GDI+绘图代码简单,并且功能远比GDI要强大。
{
if ( m_bDraw )
{
CClientDC dc(this) ;
dc.SetROP2(R2_BLACK); //绘图的模式设置,始终绘制黑色图形
CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.MoveTo(m_ptOld);
dc.LineTo(point);
m_ptOld = point ;
dc.SelectObject(pOldPen);
}
CView::OnMouseMove(nFlags, point);
}
按照你的这样我每次都要moveTo下一条线的起点,非常麻烦的。