我使用了的是单文档结构,使用了ScrollView视图,在视图上用了不同字体输出内容,结果在编译成功后,我拖动滚动条,视图中的内容糊成一团。
有人知道这是为什么吗?
下面是部分字体样式代码:
LOGFONT logFont1;
logFont1.lfHeight = 48;
logFont1.lfWidth = 0;
logFont1.lfEscapement = 0;
logFont1.lfOrientation = 0;
logFont1.lfWidth = FW_DONTCARE;
logFont1.lfItalic = 0;
logFont1.lfUnderline = 0;
logFont1.lfStrikeOut = 0;
logFont1.lfCharSet = ANSI_CHARSET;
logFont1.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont1.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont1.lfQuality = PROOF_QUALITY;
logFont1.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont1.lfFaceName,"Times New Roman"); LOGFONT logFont;
logFont.lfHeight = 24;
logFont.lfWidth = 0;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWidth = FW_DONTCARE;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont.lfFaceName,"Times New Roman"); LOGFONT logFont2;
logFont2.lfHeight = 16;
logFont2.lfWidth = 0;
logFont2.lfEscapement = 0;
logFont2.lfOrientation = 0;
logFont2.lfWidth = FW_DONTCARE;
logFont2.lfItalic = 0;
logFont2.lfUnderline = 0;
logFont2.lfStrikeOut = 0;
logFont2.lfCharSet = ANSI_CHARSET;
logFont2.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont2.lfQuality = PROOF_QUALITY;
logFont2.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont2.lfFaceName,"articl");
有人知道这是为什么吗?
下面是部分字体样式代码:
LOGFONT logFont1;
logFont1.lfHeight = 48;
logFont1.lfWidth = 0;
logFont1.lfEscapement = 0;
logFont1.lfOrientation = 0;
logFont1.lfWidth = FW_DONTCARE;
logFont1.lfItalic = 0;
logFont1.lfUnderline = 0;
logFont1.lfStrikeOut = 0;
logFont1.lfCharSet = ANSI_CHARSET;
logFont1.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont1.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont1.lfQuality = PROOF_QUALITY;
logFont1.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont1.lfFaceName,"Times New Roman"); LOGFONT logFont;
logFont.lfHeight = 24;
logFont.lfWidth = 0;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWidth = FW_DONTCARE;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont.lfFaceName,"Times New Roman"); LOGFONT logFont2;
logFont2.lfHeight = 16;
logFont2.lfWidth = 0;
logFont2.lfEscapement = 0;
logFont2.lfOrientation = 0;
logFont2.lfWidth = FW_DONTCARE;
logFont2.lfItalic = 0;
logFont2.lfUnderline = 0;
logFont2.lfStrikeOut = 0;
logFont2.lfCharSet = ANSI_CHARSET;
logFont2.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont2.lfQuality = PROOF_QUALITY;
logFont2.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont2.lfFaceName,"articl");
SetViewportOrg
GetClipBoxoffsetviewportorg
CSize docSize(700,h/35*(58+34+37*26+8)+h%35*26+58+34+34);
CRect rect;
GetClientRect(&rect);
CSize pageSize(rect.right,rect.bottom);
CSize lineSize(700,logFont.lfHeight);
SetScrollSizes(MM_LOENGLISH,docSize,pageSize,lineSize);各位看看对不对啊
{
CVCreportDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
LOGFONT logFont1;
logFont1.lfHeight = 48;
logFont1.lfWidth = 0;
logFont1.lfEscapement = 0;
logFont1.lfOrientation = 0;
logFont1.lfWidth = FW_DONTCARE;
logFont1.lfItalic = 0;
logFont1.lfUnderline = 0;
logFont1.lfStrikeOut = 0;
logFont1.lfCharSet = ANSI_CHARSET;
logFont1.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont1.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont1.lfQuality = PROOF_QUALITY;
logFont1.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont1.lfFaceName,"Times New Roman"); LOGFONT logFont;
logFont.lfHeight = 24;
logFont.lfWidth = 0;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWidth = FW_DONTCARE;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont.lfFaceName,"Times New Roman"); LOGFONT logFont2;
logFont2.lfHeight = 16;
logFont2.lfWidth = 0;
logFont2.lfEscapement = 0;
logFont2.lfOrientation = 0;
logFont2.lfWidth = FW_DONTCARE;
logFont2.lfItalic = 0;
logFont2.lfUnderline = 0;
logFont2.lfStrikeOut = 0;
logFont2.lfCharSet = ANSI_CHARSET;
logFont2.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont2.lfQuality = PROOF_QUALITY;
logFont2.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont2.lfFaceName,"articl"); int y = 0;
int i = 1;
int j1 = 35;
int h = 70;
int j2 =0;
m_pageall = h/j1 + 1;
CString num;
CFont font;
font.CreateFontIndirect(&logFont1);
CFont* oldFont = pDC->SelectObject(&font);
CRect client;
pDC->GetClipBox(&client);
TRACE("ClipBox %d %d %d %d\r\n", client.left, client.top, client.right, client.bottom); y -= GetScrollPos(SB_VERT);
SIZE size = pDC->GetTextExtent("学");
while (j2<h)
{
j2 = j1;
pDC->TextOut(20,y,"学生成绩");
y += size.cy+1;
pDC->SelectObject(oldFont);
if (font.m_hObject)
font.DeleteObject();
font.CreateFontIndirect(&logFont);
pDC->SelectObject(&font); CTime now = CTime::GetCurrentTime();
CString date = now.Format("打印日期:%B %d %Y");
if (y >= client.top && y <= client.bottom)
pDC->TextOut(20,y,date);
size = pDC->GetTextExtent("学");
y += size.cy+2;
pDC->SelectObject(oldFont);
font.DeleteObject();
font.CreateFontIndirect(&logFont2);
pDC->SelectObject(&font);
pDC->TextOut(20,y,"学号");
pDC->TextOut(210,y,"课程代码");
pDC->TextOut(330,y,"课程名");
pDC->TextOut(440,y,"教师");
pDC->TextOut(550,y,"成绩");
pDC->TextOut(610,y,"基点");
pDC->TextOut(670,y,"编号");
size = pDC->GetTextExtent("学");
y += size.cy+2;
for(i ;i<=j1&&i<=h; i++)
{
num.Format("%d",i);
pDC->TextOut(20,y,"00000000000000000000");
pDC->TextOut(210,y,"00000.00");
pDC->TextOut(330,y,"000000000000");
pDC->TextOut(440,y,"000000000000");
pDC->TextOut(550,y,"000000");
pDC->TextOut(610,y,"000000");
pDC->TextOut(670,y,num);
y += size.cy+2;
}
y += size.cy+2;
j1 = j1 +35;
} y += size.cy+2;
pDC->SelectObject(oldFont);
font.DeleteObject();
font.CreateFontIndirect(&logFont);
pDC->SelectObject(&font);
pDC->TextOut(20,y,"总计人数:");
pDC->TextOut(670,y,num);
//pDC->SelectObject(oldFont);
//,pageSize,lineSize);
/* CRect rect;
GetClientRect(&rect);
CSize pageSize(rect.right,rect.bottom);
CSize lineSize(700,logFont.lfHeight);*/
/* CPoint xx = GetDeviceScrollPosition( );
pDC->SetViewportOrg(0,xx.y);*/
pDC->SelectObject(oldFont);
font.DeleteObject();}
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here pDC->SetMapMode(MM_TEXT);
LOGFONT logFont1;
int nheight= pDC->GetDeviceCaps(LOGPIXELSX);
logFont1.lfHeight = MulDiv(48, nheight, 720);//动态计算字体
logFont1.lfEscapement = 0;
logFont1.lfOrientation = 0;
logFont1.lfWidth = FW_DONTCARE;
logFont1.lfItalic = 0;
logFont1.lfUnderline = 0;
logFont1.lfStrikeOut = 0;
logFont1.lfCharSet = ANSI_CHARSET;
logFont1.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont1.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont1.lfQuality = PROOF_QUALITY;
logFont1.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont1.lfFaceName,"Times New Roman"); LOGFONT logFont;
logFont.lfHeight = MulDiv(24, nheight, 72);
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWidth = FW_DONTCARE;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
logFont.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont.lfFaceName,"Times New Roman"); LOGFONT logFont2;
logFont2.lfHeight = MulDiv(16, nheight, 72);
logFont2.lfEscapement = 0;
logFont2.lfOrientation = 0;
logFont2.lfWidth = FW_DONTCARE;
logFont2.lfItalic = 0;
logFont2.lfUnderline = 0;
logFont2.lfStrikeOut = 0;
logFont2.lfCharSet = ANSI_CHARSET;
logFont2.lfOutPrecision= OUT_DEFAULT_PRECIS;
logFont2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont2.lfQuality = PROOF_QUALITY;
logFont2.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN;
strcpy(logFont2.lfFaceName,"articl"); int y = 0;
int i = 1;
int j1 = 35;
int h = 70;
int j2 =0;
m_pageall = h/j1 + 1;
CString num;
CFont font;
font.CreateFontIndirect(&logFont1);
CFont* oldFont = pDC->SelectObject(&font); y -= GetScrollPos(SB_VERT);
SIZE size = pDC->GetTextExtent("学");
CRect rc(0, 0, 0, 0);
while (j2<h)
{
j2 = j1;
pDC->DrawText("学生成绩", &rc, DT_TOP | DT_SINGLELINE | DT_CALCRECT);
rc.OffsetRect(20, y);
pDC->DrawText("学生成绩", &rc, DT_TOP | DT_SINGLELINE);
// pDC->TextOut(20,y,"学生成绩");
y += size.cy+1;
pDC->SelectObject(oldFont);
if (font.m_hObject)
font.DeleteObject();
font.CreateFontIndirect(&logFont);
pDC->SelectObject(&font); CTime now = CTime::GetCurrentTime();
CString date = now.Format("打印日期:%B %d %Y");
pDC->TextOut(20,y,date);
size = pDC->GetTextExtent("学");
y += size.cy+2;
pDC->SelectObject(oldFont);
font.DeleteObject();
font.CreateFontIndirect(&logFont2);
pDC->SelectObject(&font);
pDC->TextOut(20,y,"学号");
pDC->TextOut(210,y,"课程代码");
pDC->TextOut(330,y,"课程名");
pDC->TextOut(440,y,"教师");
pDC->TextOut(550,y,"成绩");
pDC->TextOut(610,y,"基点");
pDC->TextOut(670,y,"编号");
size = pDC->GetTextExtent("学");
y += size.cy+2;
for(i ;i<=j1&&i<=h; i++)
{
num.Format("%d",i);
pDC->TextOut(20,y,"00000000000000000000");
pDC->TextOut(210,y,"00000.00");
pDC->TextOut(330,y,"000000000000");
pDC->TextOut(440,y,"000000000000");
pDC->TextOut(550,y,"000000");
pDC->TextOut(610,y,"000000");
pDC->TextOut(670,y,num);
y += size.cy+2;
}
y += size.cy+2;
j1 = j1 +35;
} y += size.cy+2;
pDC->SelectObject(oldFont);
font.DeleteObject();
font.CreateFontIndirect(&logFont);
pDC->SelectObject(&font);
pDC->TextOut(20,y,"总计人数:");
pDC->TextOut(670,y,num);
pDC->SelectObject(oldFont);
font.DeleteObject();
字体的高度要根据dc动态计算