mfc绘制坐标的例子?该怎么处理
mfc绘制坐标的例子?
就是,先绘制一个坐标,根据时是计算出来的x,y值在坐标里面描点
比如一秒出一个值,完后将这些点连接起来。就成一个类似曲线的东西
谁有没有一个例子,给我参考下
------解决方案--------------------
画点,然后连线lineto就可以了
------解决方案--------------------
呵呵,
1. 获得描画母体的DC
2. 根据DC获得pixelWidth,pixelHeight
3. 获得实际数据的最大Width和最大Height,就是x,y,波动的Range
4. 获得比例(为了保持纵横比,取pixelWidth/width或者pixelHeight/height
5. 根据实际数据x,y和变化公式得到屏幕px,py
px = (x-xMin) * pixelWidth/width
py = (ymax - y) * pixelWidth/width
6. lineto
------解决方案--------------------
给你写个简单例子,画图,写字,你自己改吧!
// 这个函数就是实现了画框和写字
void DrawRect()
{
int nWidth = 300;
int nHeight = 200;
CDC* pDC ;
// 得到控件
CWnd* pWnd = GetDlgItem(IDC_STATIC_001);
pDC = pWnd->GetDC();
//首先定义一个显示设备对象
CDC MemDC;
//定义一个位图对象
CBitmap MemBitmap;
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,
//可以用窗口的大小,也可以自己定义
//(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap * pOldBit = MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(200,24,158));
// 定义画笔
CPen pen2(PS_SOLID,0,RGB(255,255,0));
CPen *old_pen2 = MemDC.SelectObject(&pen2);
// 背景透明
MemDC.SetBkMode(TRANSPARENT);
//绘图
MemDC.MoveTo(50,50);
MemDC.LineTo(50,200 - 50);
MemDC.LineTo(200 - 50, 200 - 50);
MemDC.LineTo(200 - 50, 50);
MemDC.LineTo(50,50);
// 恢复画笔
MemDC.SelectObject(old_pen2);
// 释放字体对象
pen2.DeleteObject();
// 释放指针字体对象
old_pen2->DeleteObject();
CFont font5;
// 创建字体 Arial格式 180为字高(字母12*24)
VERIFY(font5.CreatePointFont(240, "宋体", pDC));
// 选择该字体进入MemDC
CFont * def_font5 = MemDC.SelectObject(&font5);
// 颜色
MemDC.SetTextColor(RGB(255,255,0));
// 背景透明
MemDC.SetBkMode(TRANSPARENT);
// 打字
MemDC.TextOut(10,10,"你好");
// 复原字体
MemDC.SelectObject(def_font5);
// 释放字体对象
font5.DeleteObject();
// 释放指针字体对象
def_font5->DeleteObject();
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,300,300,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
//把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
就是,先绘制一个坐标,根据时是计算出来的x,y值在坐标里面描点
比如一秒出一个值,完后将这些点连接起来。就成一个类似曲线的东西
谁有没有一个例子,给我参考下
------解决方案--------------------
画点,然后连线lineto就可以了
------解决方案--------------------
呵呵,
1. 获得描画母体的DC
2. 根据DC获得pixelWidth,pixelHeight
3. 获得实际数据的最大Width和最大Height,就是x,y,波动的Range
4. 获得比例(为了保持纵横比,取pixelWidth/width或者pixelHeight/height
5. 根据实际数据x,y和变化公式得到屏幕px,py
px = (x-xMin) * pixelWidth/width
py = (ymax - y) * pixelWidth/width
6. lineto
------解决方案--------------------
给你写个简单例子,画图,写字,你自己改吧!
// 这个函数就是实现了画框和写字
void DrawRect()
{
int nWidth = 300;
int nHeight = 200;
CDC* pDC ;
// 得到控件
CWnd* pWnd = GetDlgItem(IDC_STATIC_001);
pDC = pWnd->GetDC();
//首先定义一个显示设备对象
CDC MemDC;
//定义一个位图对象
CBitmap MemBitmap;
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,
//可以用窗口的大小,也可以自己定义
//(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap * pOldBit = MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(200,24,158));
// 定义画笔
CPen pen2(PS_SOLID,0,RGB(255,255,0));
CPen *old_pen2 = MemDC.SelectObject(&pen2);
// 背景透明
MemDC.SetBkMode(TRANSPARENT);
//绘图
MemDC.MoveTo(50,50);
MemDC.LineTo(50,200 - 50);
MemDC.LineTo(200 - 50, 200 - 50);
MemDC.LineTo(200 - 50, 50);
MemDC.LineTo(50,50);
// 恢复画笔
MemDC.SelectObject(old_pen2);
// 释放字体对象
pen2.DeleteObject();
// 释放指针字体对象
old_pen2->DeleteObject();
CFont font5;
// 创建字体 Arial格式 180为字高(字母12*24)
VERIFY(font5.CreatePointFont(240, "宋体", pDC));
// 选择该字体进入MemDC
CFont * def_font5 = MemDC.SelectObject(&font5);
// 颜色
MemDC.SetTextColor(RGB(255,255,0));
// 背景透明
MemDC.SetBkMode(TRANSPARENT);
// 打字
MemDC.TextOut(10,10,"你好");
// 复原字体
MemDC.SelectObject(def_font5);
// 释放字体对象
font5.DeleteObject();
// 释放指针字体对象
def_font5->DeleteObject();
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,300,300,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
//把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}