void CStringView::OnDraw(CDC* pDC)
{
int i,j,nHeight;
CString str;
CFont font;
TEXTMETRIC tm; CPoemDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); pDC->Rectangle(m_rectPrint+CRect(0,0,-20,20));
j=m_rectPrint.Width()/1440;
for(i=0;i<=j;i++){
str.Format("%02d",i);
pDC->TextOut(i*1440,0,str);
}
j=-m_rectPrint.Height()/1440;
for(i=0;i<=j;i++){
str.Format("%02d",i);
pDC->TextOut(0,-i*1440,str);
}
font.CreateFont(-400,0,0,0,400,false,false,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,
"Times New Roman");
CFont* pOldFont=(CFont*)pDC->SelectObject(&font);
pDC->GetTextMetrics(&tm);
nHeight=tm.tmHeight+tm.tmExternalLeading; j=pDoc->m_stringArray.GetSize();
for(i=0;i<j;i++){
pDC->TextOut(720,-i*nHeight-720,pDoc->m_stringArray[i]);
} pDC->SelectObject(pOldFont);
}
上面程序中为什么要加入最后一行pDC->SelectObject(pOldFont);呢?我试过不加入也可以正常运行
{
int i,j,nHeight;
CString str;
CFont font;
TEXTMETRIC tm; CPoemDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); pDC->Rectangle(m_rectPrint+CRect(0,0,-20,20));
j=m_rectPrint.Width()/1440;
for(i=0;i<=j;i++){
str.Format("%02d",i);
pDC->TextOut(i*1440,0,str);
}
j=-m_rectPrint.Height()/1440;
for(i=0;i<=j;i++){
str.Format("%02d",i);
pDC->TextOut(0,-i*1440,str);
}
font.CreateFont(-400,0,0,0,400,false,false,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,
"Times New Roman");
CFont* pOldFont=(CFont*)pDC->SelectObject(&font);
pDC->GetTextMetrics(&tm);
nHeight=tm.tmHeight+tm.tmExternalLeading; j=pDoc->m_stringArray.GetSize();
for(i=0;i<j;i++){
pDC->TextOut(720,-i*nHeight-720,pDoc->m_stringArray[i]);
} pDC->SelectObject(pOldFont);
}
上面程序中为什么要加入最后一行pDC->SelectObject(pOldFont);呢?我试过不加入也可以正常运行
解决方案 »
- CView 输入文字并可以设置底纹???
- 如何使用桌面程序向web页面填充数据
- MFC编译的问题,using mfc in a static lib 和using mfc in a shared dll的区别
- 求教ADO异常-能够打开读取数据库,但是总是抛出异常,怎么回事?
- 内存映射能实现线程之间的数据同步交换么?
- 8好意思,没分了。CComboBox加了项目,为什么点箭头列表不显示出来?
- 请问各位怎么使用另一类的保护成员?在先等...
- 数据结构该怎么设置?
- 大家议论一下这本书怎么样?顺便拿点分。
- 紧急求救,关于CAsyncSocket的阻塞问题在线等待
- 在视图中用鼠标拖动直线控件的原理是什么?
- DAO连接数据库怎样进行insert和update的操作
CFont font;
你是申明了一个局部GDI对象,出了作用域是会自动释放,
但良好的编程习惯要: 有Create 就要有DeleteObject相对应(手工释放GDI对象,也就是pDC->SelectObject(pOldFont);后要加一句:font.DeleteObject() )。