各位尊敬的大峡: 紧急求助: 在VC里,请问做报表怎么做的?能够打印的功能。专业一点的(请给出写源程序)。从数据库里查询的数据项,要做成报表哦,

解决方案 »

  1.   

       pDC->SetMapMode(MM_TWIPS);       LOGFONT logFont[2];       logFont[0].lfHeight=460;
           logFont[0].lfWidth=0;
           logFont[0].lfEscapement=0;
           logFont[0].lfOrientation=0;
           logFont[0].lfWeight=FW_NORMAL;
           logFont[0].lfItalic=0;
           logFont[0].lfUnderline=0;
           logFont[0].lfStrikeOut=0;
           logFont[0].lfCharSet=ANSI_CHARSET;
           logFont[0].lfOutPrecision=OUT_DEFAULT_PRECIS;
           logFont[0].lfClipPrecision=CLIP_DEFAULT_PRECIS;
           logFont[0].lfQuality=PROOF_QUALITY;
           logFont[0].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
           strcpy(logFont[0].lfFaceName,"Times New Roman");       logFont[1].lfHeight=360;
           logFont[1].lfWidth=0;
           logFont[1].lfEscapement=0;
           logFont[1].lfOrientation=0;
           logFont[1].lfWeight=FW_NORMAL;
           logFont[1].lfItalic=0;
           logFont[1].lfUnderline=0;
           logFont[1].lfStrikeOut=0;
           logFont[1].lfCharSet=ANSI_CHARSET;
           logFont[1].lfClipPrecision=CLIP_DEFAULT_PRECIS;
           logFont[1].lfQuality=PROOF_QUALITY;
           logFont[1].lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
           strcpy(logFont[0].lfFaceName,"Times New Roman");       CFont font[2];       font[0].CreateFontIndirect(&logFont[0]);
           font[1].CreateFontIndirect(&logFont[1]);
           CFont *oldFont=pDC->SelectObject(&font[0]);       int vs1,vs2,vs3,vs4,vs;
         int hs;
       int rw1,rw2,rw3;
       int mlh;
           int loopn;       vs1=-900;
       vs2=-600;
       vs3=-400;
           vs4=-800;    hs=1500;       rw1=1300;
           rw2=1300;
           rw3=1300;    RECT Rect0,Rect[7];    Rect0.left=hs;
       Rect0.right=Rect0.left+rw1*2+rw2*4+rw3;
       Rect0.top=vs1;
           Rect0.bottom=Rect0.top+vs2;       Rect[0].left=hs;
           Rect[0].right=Rect[0].left+rw1;
           Rect[0].top=Rect0.bottom+vs3;
           Rect[0].bottom=Rect[0].top+vs4;       Rect[1].left=Rect[0].right;
           Rect[1].right=Rect[1].left+rw1;
           Rect[1].top=Rect[0].top;
           Rect[1].bottom=Rect[0].bottom;       Rect[2].left=Rect[1].right;
           Rect[2].right=Rect[2].left+rw2;
           Rect[2].top=Rect[0].top;
           Rect[2].bottom=Rect[0].bottom;       Rect[3].left=Rect[2].right;
           Rect[3].right=Rect[3].left+rw2;
           Rect[3].top=Rect[0].top;
           Rect[3].bottom=Rect[0].bottom;       Rect[4].left=Rect[3].right;
           Rect[4].right=Rect[4].left+rw2;
           Rect[4].top=Rect[0].top;
           Rect[4].bottom=Rect[0].bottom;
       
           Rect[5].left=Rect[4].right;
           Rect[5].right=Rect[5].left+rw2;
           Rect[5].top=Rect[0].top;
           Rect[5].bottom=Rect[0].bottom;    
     
           Rect[6].left=Rect[5].right;
           Rect[6].right=Rect[6].left+rw3;
           Rect[6].top=Rect[0].top;
           Rect[6].bottom=Rect[0].bottom;    UINT nFormat1,nFormat2;
           nFormat1=DT_CENTER;
           nFormat2=DT_CENTER|DT_WORDBREAK;
       
           CString Tittle,fth[7];
       Tittle="某地区国有企事业单位专业技术人员数构成表";
           fth[0]="年份";
           fth[1]="合计";
           fth[2]="工程技术人员";
           fth[3]="农业技术人员";
           fth[4]="卫生技术人员";
           fth[5]="科学研究人员";
           fth[6]="教学人员";
         
       pDC->DrawText(Tittle,-1,&Rect0,nFormat1);    pDC->SelectObject(&font[1]);       vs=Rect[0].top+160;
       pDC->MoveTo(Rect[0].left,vs);
           pDC->LineTo(Rect[6].right,vs);       loopn=0;
           while (loopn<=6)
       {
      pDC->DrawText(fth[loopn],-1,&Rect[loopn],nFormat2);
              loopn=loopn+1;
       }    mlh=1000;
           CString fs[7];
           while (!pDoc->m_ExaSet.IsBOF()&&!pDoc->m_ExaSet.IsEOF())
       {
          vs=vs-mlh-100;
          pDC->MoveTo(Rect[0].left,vs);
              pDC->LineTo(Rect[6].right,vs);

      fs[0].Format("%ld",pDoc->m_ExaSet.m_fy); 
              fs[1].Format("%ld",pDoc->m_ExaSet.m_f1+pDoc->m_ExaSet.m_f2+pDoc->m_ExaSet.m_f3+pDoc->m_ExaSet.m_f4+pDoc->m_ExaSet.m_f5); 
              fs[2].Format("%ld",pDoc->m_ExaSet.m_f1); 
              fs[3].Format("%ld",pDoc->m_ExaSet.m_f2); 
              fs[4].Format("%ld",pDoc->m_ExaSet.m_f3); 
              fs[5].Format("%ld",pDoc->m_ExaSet.m_f4); 
              fs[6].Format("%ld",pDoc->m_ExaSet.m_f5);           Rect[0].top=vs-80;
              Rect[0].bottom=Rect[0].top+vs4;          Rect[1].top=Rect[0].top;
              Rect[1].bottom=Rect[0].bottom;          Rect[2].top=Rect[0].top;
              Rect[2].bottom=Rect[0].bottom;          Rect[3].top=Rect[0].top;
              Rect[3].bottom=Rect[0].bottom;          Rect[4].top=Rect[0].top;
              Rect[4].bottom=Rect[0].bottom;
       
              Rect[5].top=Rect[0].top;
              Rect[5].bottom=Rect[0].bottom;              Rect[6].top=Rect[0].top;
              Rect[6].bottom=Rect[0].bottom;          mlh=0;      
              loopn=0;
              while (loopn<=6)
      {
         fs[loopn].TrimRight();
                 if (fs[loopn].GetLength()==0)
                    fs[loopn]=" ";             if (fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat2))>=mlh)
                    mlh=int (fabs(pDC->DrawText(fs[loopn],&Rect[loopn],nFormat2)));
     
     loopn=loopn+1;
      }   pDoc->m_ExaSet.MoveNext();    }
           vs=vs-mlh-100;
           pDC->MoveTo(Rect[0].left,vs);
           pDC->LineTo(Rect[6].right,vs);    loopn=0;
           while (loopn<=5)
       {
          pDC->MoveTo(Rect[loopn].right-60,Rect0.bottom+vs3+160);
              pDC->LineTo(Rect[loopn].right-60,vs);
              loopn=loopn+1;
       }
       pDC->SelectObject(oldFont);
      

  2.   

    nalo(nalo) ,诚挚的谢谢,你写的很详细。我的意思是,有没有象VB里的REPORT控键之类的报表生成器。在DIALOG里加报表控键, 或者用菜单控制的方法,请指教。