用VC开发股票分析软件(四)

来源:互联网 发布:自动发卡源码带wap 编辑:程序博客网 时间:2024/06/05 14:59
K线已经绘制成功,下面要做一个分析软件的简单框架。新建三个VIEW。
  第一个为CDataView,显示交易数据
  第二个为CFormulaView,显示公式,将用到TA-LIB库文件
  第三个为CKlineView,显示K线图
  将窗口分成三份,左侧上方为CKlineView,下方为CFormulaView,右侧为CDataView
  新建一个MFC MDI程序。
  在ChildFrm.cpp中加入切分窗口程序

  1. BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
  2.     CCreateContext* pContext)
  3. {
  4.    CRect rect ;
  5.    GetClientRect(rect);
  6.    m_wndSplitter1.CreateStatic(this,1,2);
  7.    
  8.    m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CDataView),CSize(0,0),pContext);
  9.    m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,   
  10.    WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0));
  11.    m_wndSplitter1.SetColumnInfo(0,750,200);
  12.    m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CKlineView),CSize(0,450),pContext);
  13.    m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CFormulaView),CSize(0,0),pContext);
  14.    return TRUE;
  15. }


 下一步将重绘三个视图的OnDraw函数形成完整的分析软件示例,数据将用工商银行601398的月线来进行测试。
 为了对照,将工商银行的BMP图形读到View中来。读BMP的方法如下

  1. HBITMAP   hbmp=
  2.         (HBITMAP)LoadImage(NULL,"d://blog//601318.bmp",IMAGE_BITMAP,0,
  3.         0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);   
  4.     CBitmap   cbmp;   
  5.     cbmp.Attach(hbmp);   
  6.     BITMAP   bmp;   
  7.     cbmp.GetBitmap(&bmp);   
  8.     cbmp.Detach();   
  9.     UINT   *   pData = new UINT[bmp.bmWidth * bmp.bmHeight];   
  10.     BITMAPINFO   bmpInfo;   
  11.           bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);   
  12.           bmpInfo.bmiHeader.biWidth = bmp.bmWidth;   
  13.           bmpInfo.bmiHeader.biHeight = -bmp.bmHeight;   
  14.           bmpInfo.bmiHeader.biPlanes = 1;   
  15.           bmpInfo.bmiHeader.biCompression = BI_RGB;   
  16.           bmpInfo.bmiHeader.biBitCount = 32;   
  17.     
  18.     GetDIBits(pDC->m_hDC,hbmp,0,bmp.bmHeight,pData,&bmpInfo,DIB_RGB_COLORS);   
  19.     UINT color, r, g, b;   
  20.     for(int i = 0; i < bmp.bmWidth * bmp.bmHeight; i++)   
  21.     {   
  22.      color  = pData[i];   
  23.      b = color<<8>>24;   
  24.      g = color<<16>>24;   
  25.      r = color<<24>>24;   
  26.      r = 0; 
  27.      pData[i] = RGB(r,g,b);   
  28.     }   
  29.    SetDIBits(pDC->m_hDC,   hbmp,0,   bmp.bmHeight,   pData,&bmpInfo,   DIB_RGB_COLORS);   
  30.    CDC   dcmem;   
  31.    dcmem.CreateCompatibleDC(pDC);   
  32.    HGDIOBJ   hold=::SelectObject(dcmem.m_hDC,hbmp);   
  33.    pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcmem,0,0,SRCCOPY);   
  34.    ::SelectObject(dcmem.m_hDC,hold);   
  35.    delete   pData;   
  36.    DeleteObject(hbmp); 
  37.