我用的是VS2010,建立MFC单文档,(建立时没有选数据库这一项)后面新建立了一个mfc ODBC的类,想把数据表的内容显示在视图中,结果只显示了一行 book_id,book_name,book_number, nullvalence这些字段,内容一点都没有显示,请各位帮我看以下程序有什么问题,怎么改正,万分感谢// CCLASSINFOView 消息处理程序
//用来在视图中显示classinfo数据表的内容void CCLASSINFOView::DispClassInfo(CDC* pDC, CString strSQL, CString strClass)
{
         CFont font;
LOGFONT lf=m_lfFont;
lf.lfWeight=700;//显示加粗
wcscpy_s(lf.lfFaceName,_T("幼圆"));
font.CreateFontIndirectW(&lf);
TEXTMETRIC tm;
pDC->GetTextMetricsW(&tm);
int nLineHeight=(int)((tm.tmHeight+tm.tmExternalLeading)*5);
//行高1.5字符高度
int x=0,y=0,nWidth;
CFont *oldFont=pDC->SelectObject(&font);//使用新字体
//输出表头
CString strHeader[]={L"book_id",L"book_name",L"book_number", L"nullvalence",L"press"};
int nStrWidth[]={10,25,25,8,10};
CclassinfoSet cSet;     //新建的mfc ODBC
cSet.m_strFilter=strSQL;
cSet.Open();
for(UINT i=0;i<cSet.m_nFields;i++)
{
//计算每一个字段的长度
nWidth=tm.tmAveCharWidth *nStrWidth[i];
pDC->TextOutW(x,y,strHeader[i]);
x+=nWidth;
}
pDC->SelectObject(oldFont);//恢复原来的字体
//显示具体内容
CString str;
while(!cSet.IsEOF())
{
if(strClass==cSet.m_classno)//强调要显示的班级
{
lf.lfWeight=0;
wcscpy_s(lf.lfFaceName,_T("楷体_GB2312"));
font.DeleteObject();
font.CreateFontIndirectW(&lf);
pDC->SelectObject(&font);
}
else
pDC->SelectObject(oldFont);
x=0;y+=nLineHeight;
for(UINT i=0;i<cSet.m_nFields;i++)
{
cSet.GetFieldValue(i,str);
//计算每一个字段所需要的长度
nWidth=tm.tmAveCharWidth *nStrWidth[i];
pDC->TextOutW(x,y,strHeader[i]);
x+=nWidth;
}
cSet.MoveNext();
}
cSet.Close();
//设置视图滚动大小
CSize sizeTotal;
sizeTotal.cx=x+nWidth;
sizeTotal.cy=y+nLineHeight;
SetScrollSizes(MM_TEXT,sizeTotal);
}
// CCLASSINFOView 绘制void CCLASSINFOView::OnDraw(CDC *pDC)
{
CCLASSINFODoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CFont font;
font.CreateFontIndirectW(&m_lfFont);
CFont *oldFont=pDC->SelectObject(&font);
DispClassInfo(pDC,m_strClassNO,m_strSQL);
pDC->SelectObject(oldFont);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
}
最后调用Invalidate();