读书人

windows api画柱状图,该如何解决

发布时间: 2012-03-25 20:55:16 作者: rapoo

windows api画柱状图
想用windows api画柱状图,且要能保存为bmp格式,那位能给帮助咯?
完全不知道要怎么弄。。。
我想达到这么个效果:画出柱状图的时候,像素点也保存在自己定义的did结构中,只需要保存为bmp

[解决办法]
柱状图如果不要求画得圆润啊什么的,无非就是 fillrect 结合 rectangle
[解决办法]

C/C++ code
#include "WINDOWSX.H" CClientDC SHDC(this);//取得客户区内存DC CPaintDC   dc(this); CDC memDC; CRect rect; GetClientRect(rect); memDC.CreateCompatibleDC(&SHDC); CBitmap bm; int Width = rect.Width();// int Height = rect.Height();// bm.CreateCompatibleBitmap(&SHDC, Width, Height); CBitmap*  pOld = memDC.SelectObject(&bm); memDC.BitBlt(0, 0, Width, Height, &SHDC, 0, 0, SRCCOPY); memDC.SelectObject(pOld); BITMAP  btm; bm.GetBitmap(&btm); DWORD  size = btm.bmWidthBytes * btm.bmHeight; LPSTR lpData =(LPSTR)GlobalAllocPtr(GPTR, size); BITMAPFILEHEADER   bfh;///////////////////////////////////////////// BITMAPINFOHEADER  bih; bih.biBitCount = btm.bmBitsPixel; bih.biClrImportant = 0; bih.biClrUsed = 0; bih.biCompression = 0; bih.biHeight = btm.bmHeight; bih.biPlanes = 1; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biSizeImage = size; bih.biWidth = btm.bmWidth; bih.biXPelsPerMeter = 0; bih.biYPelsPerMeter = 0; GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); bfh.bfReserved1 = bfh.bfReserved2 = 0; bfh.bfType = ((WORD)('M'<< 8)|'B'); bfh.bfSize = 54 + size; bfh.bfOffBits = 54; CFileDialog dlg(false,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|")); if (dlg.DoModal()==IDOK) {  CFile  bf;  CString ss=dlg.GetPathName();  if(bf.Open(ss, CFile::modeCreate | CFile::modeWrite))  {   bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));   bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));   bf.WriteHuge(lpData, size);   bf.Close();  }  GlobalFreePtr(lpData); }
[解决办法]
http://blog.csdn.net/q1wenchang/article/details/5824769
[解决办法]
存BMP没研究过,不过画柱状图有个简单的笨方法,就是把平面叠加起来画。

读书人网 >VC/MFC

热点推荐