首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC,画无数条曲线,怎的保存绘图模版

2012-08-22 
MFC,画无数条曲线,怎样保存绘图模版?我想建立一个这样的视图,作为分割视图的一部分,用它来保存绘图的模版

MFC,画无数条曲线,怎样保存绘图模版?
我想建立一个这样的视图,作为分割视图的一部分,用它来保存绘图的模版信息。

比方说在横坐标(0-200)上绘制2条曲线,(200-400)上绘制3条曲线,(400-600)上绘制2条曲线;

这个视图具有以下的功能:

1、可以保存曲线信息,比方说曲线1,黑色,虚线;这个其实就是个图例;
2、这个200、400、600就像List一样,是可以点住拉动的;
3、保存图例

请高手指点,我该怎么实现啊?我应该建立一个什么样的View类,是继承CFormView的吗?
我可以在上面实现这些功能啊?

请高手指点,急急急!!!

[解决办法]
BMP导出代码

C/C++ code
HDC hDC;            //设备描述表    int iBits;            //当前显示分辨率下每个像素所占字节数    WORD wBitCount;        //位图中每个像素所占字节数    //定义调色板大小, 位图中像素字节大小 ,  位图文件大小 , 写入文件字节数    DWORD  dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;    BITMAP               Bitmap;  //位图属性结构    BITMAPFILEHEADER   bmfHdr;  //位图文件头结构    BITMAPINFOHEADER   bi;        //位图信息头结构     LPBITMAPINFOHEADER lpbi;    //指向位图信息头结构        HANDLE fh, hDib, hPal;    HPALETTE hOldPal=NULL; //定义文件,分配内存句柄,调色板句柄    CString lpFileName = strFile;        //计算位图文件每个像素所占字节数    hDC = CreateDC(_T("DISPLAY"),NULL,NULL,NULL);    iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);    DeleteDC(hDC);    if (iBits <= 1)  wBitCount = 1;    else if (iBits <= 4) wBitCount = 4;    else if (iBits <= 8) wBitCount = 8;    else if (iBits <= 24) wBitCount = 24;    else wBitCount = 32;    //计算调色板大小    if (wBitCount <= 8) dwPaletteSize = (1<<wBitCount) * sizeof(RGBQUAD);        //设置位图信息头结构    GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);    bi.biSize           =  sizeof(BITMAPINFOHEADER);    bi.biWidth          =  Bitmap.bmWidth;    bi.biHeight         =  Bitmap.bmHeight;    bi.biPlanes         =  1;    bi.biBitCount       =  wBitCount;    bi.biCompression    =  BI_RGB;    bi.biSizeImage      =  0;    bi.biXPelsPerMeter  =  0;    bi.biYPelsPerMeter  =  0;    bi.biClrUsed        =  0;    bi.biClrImportant   =  0;        dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight; //为位图内容分配内存                                                                             /*xxxxxxxx计算位图大小分解一下(解释一下上面的语句)xxxxxxxxxxxxxxxxxxxx                                                                          //每个扫描行所占的字节数应该为4的整数倍,具体算法为:                                                                         int biWidth = (Bitmap.bmWidth*wBitCount) / 32;                                                                         if((Bitmap.bmWidth*wBitCount) % 32)                                                                         biWidth++; //不是整数倍的加1                                                                         biWidth *= 4;//到这里,计算得到的为每个扫描行的字节数。                                                                         dwBmBitsSize = biWidth * Bitmap.bmHeight;//得到大小    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/            hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);    *lpbi = bi;    // 处理调色板       hPal = GetStockObject(DEFAULT_PALETTE);    if (hPal)    {        hDC = ::GetDC(NULL);        hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);        RealizePalette(hDC);    }    // 获取该调色板下新的像素值    GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS);    //恢复调色板       if (hOldPal)    {        SelectPalette(hDC, hOldPal, TRUE);        RealizePalette(hDC);        ::ReleaseDC(NULL, hDC);    }    //创建位图文件        fh=CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);    if (fh==INVALID_HANDLE_VALUE)    {        AfxMessageBox("创建位图失败");        return;    }    // 设置位图文件头    bmfHdr.bfType = 0x4D42;  // "BM"    dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize+dwBmBitsSize;      bmfHdr.bfSize = dwDIBSize;    bmfHdr.bfReserved1 = 0;    bmfHdr.bfReserved2 = 0;    bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;    // 写入位图文件头    WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);    // 写入位图文件其余内容    WriteFile(fh, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize , &dwWritten, NULL);     //清除       GlobalUnlock(hDib);    GlobalFree(hDib);    CloseHandle(fh);    //AfxMessageBox("保存图片成功"); 

热点排行