我跟从网上下了现成的打印函数,改动了一下,满足了自己的要求,可是现在想添加网格,遇到了难题
在这个打印函数里面  CDC *pDC,在MoveTo,LineTo,不行,运行时报错,不知是什么缘故,希望大家帮帮小弟,我还是个初学者。代码如下BOOL CMyListView::PrintListCtrl(CListCtrl &list)
{
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.Flags = PD_RETURNDC;
pd.hDC = NULL;
pd.hwndOwner = NULL;
pd.hInstance = NULL;
pd.nMaxPage = 1;
pd.nMinPage = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nCopies = 1;
pd.hDevMode = NULL;
pd.hDevNames = NULL; //显示打印对话框,由用户来设定纸张大小等。
if(!PrintDlg(&pd)) return FALSE; 
ASSERT(pd.hDC!=NULL);    //取打印纸张高度和宽度
int nHorRes = GetDeviceCaps(pd.hDC, HORZRES); 
int nVerRes = GetDeviceCaps(pd.hDC, VERTRES); int nXMargin = 3;//左边页边距,3个字符
    int nYMargin = 3;//顶部页边距,3个字符  //获取打印机字体
TEXTMETRIC tm;
GetTextMetrics(pd.hDC, &tm);
int nCharHeight = tm.tmHeight;
int nCharWidth = tm.tmAveCharWidth;//不同的打印机此值不同
CHeaderCtrl* pHeader = list.GetHeaderCtrl();
//获得行,列的个数
int nColCount = pHeader->GetItemCount();
int nLineCount = list.GetItemCount();
int ColOrderArray[100];
COLATT ca[100];
list.GetColumnOrderArray(ColOrderArray, nColCount);
int nColX =nXMargin*nCharWidth; //检索各列的信息,确定列标题的内容长度。
for(int i =0 ; i< nColCount; i++)
{
ca[i].nColIndex = ColOrderArray[i];
LVCOLUMN lvc;
char text[100];
lvc.mask = LVCF_TEXT|LVCF_SUBITEM;
lvc.pszText = text;

lvc.cchTextMax = 100;
list.GetColumn(ca[i].nColIndex, &lvc);
ca[i].strColText = lvc.pszText;
ca[i].nSubItemIndex = i;
ca[i].nPrintX = nColX;

nColX += nCharWidth * strlen(ca[i].strColText); if(nColX > nHorRes) 
{
DeleteDC(pd.hDC);
AfxMessageBox("字段太多,无法在一行内打印,请试用较大的纸,或横向打印。");
return FALSE;
} } DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "ListCtrl Data Printing"; 
di.lpszOutput = (LPTSTR) NULL; 
di.lpszDatatype = (LPTSTR) NULL; 
di.fwType = 0; 
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
//调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。
for(i =1; i<nColCount; i++)
{
   
ca[i].nPrintX = ca[i-1].nPrintX + list.GetColumnWidth(i-1) * 7;
    
}//输出列标题
for(i =0; i<nColCount; i++)
{
TextOut(pd.hDC, ca[i].nPrintX, nYMargin, ca[i].strColText, strlen(ca[i].strColText));
       
}
int nMaxLinePerPage = nVerRes/nCharHeight -3;//一页的最大行数
int nCurPage =1;
//输出各列的数据
for(i =0; i<nLineCount; i++)
{
for(int j =0; j<nColCount; j++)
{
if(i+1-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
{
//新的一页
EndPage(pd.hDC);
StartPage(pd.hDC);
for(i =0; i<nColCount; i++)
{
TextOut(pd.hDC, ca[i].nPrintX, nYMargin, ca[i].strColText, strlen(ca[i].strColText)); }
nCurPage ++;
}

CString subitem = list.GetItemText(i, ca[j].nSubItemIndex);
TextOut(pd.hDC, ca[j].nPrintX, nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, subitem, strlen(subitem));
}
} EndPage(pd.hDC);
EndDoc(pd.hDC);
//打印结束
DeleteDC(pd.hDC);
return TRUE;}