关于单文档中字体设置的问题----- 单文档中有两行,一行是日期,一行是时间,我想设置这两行的字体,让它们随着单文档窗口的缩放实现字体的大小变化,请问怎么实现?谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CFont *f = NULL;void CSystemTimeView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if (f != NULL) delete f; f = new CFont; f->CreateFont(cy/20,cx/30,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");}void CSystemTimeView::OnDraw(CDC* pDC){ CSystemTimeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CTime time; time = CTime::GetCurrentTime(); CString s; s.Format("%d/%d/%d\r\n%02d:%02d:%02d",time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); CClientDC dc(this); CRect rc; GetClientRect(rc); rc.top = rc.bottom / 2; CFont *oldFont = dc.SelectObject(f); dc.DrawText(s,rc,DT_CENTER); dc.SelectObject(oldFont);}记得在退出程序的时候要delete f; 请问程序结束时的delete f;是加在下面的么?还是在处理关闭程序的消息中添加的?能说说它的具体作用么?void CStep4View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){ delete f;} 是在OnDestroy里面加,不过也不用太注意它啦,程序都结束了也不怕泄漏了,加上它只不过是个习惯问题 drawtext是不是很难定位,并不是真的在中间~还有一个问题,就是实现缩放字体的功能后却会闪烁,怎么处理呢? 想要精确定位的话就要自己计算了,要考虑到字体大小和窗体大小。想防止闪烁没有什么好的办法,下面的方法可用,但可能会让用户感觉不爽void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) { CFrameWnd::OnSizing(fwSide, pRect); LockWindowUpdate();} 关于CAsyncSocket::OnReceive的问题 doxygen对MFC对话框程序的类找不完,不知各位有没解决方法 ADO &Access应用于登录界面的问题(急!在线等) 怎样获得字体坐标? 弱弱地问一下如何改变SDI的背景颜色? 我把工具箱里RichEdit20A控件拉到对话框上 对话框就显示不出来了,但能编译 晕死,这是什么调用? 怪~ 菜鸟问题,如何指定窗口和对话框弹出的位置?在哪里指定? 新手的困惑 创建2个工具条,怎样使他们重叠在一起(放在同一位子上) VC7 中 stdafx.h 头文件问题?
void CSystemTimeView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (f != NULL)
delete f;
f = new CFont;
f->CreateFont(cy/20,cx/30,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");
}
void CSystemTimeView::OnDraw(CDC* pDC)
{
CSystemTimeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CTime time;
time = CTime::GetCurrentTime();
CString s;
s.Format("%d/%d/%d\r\n%02d:%02d:%02d",time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond());
CClientDC dc(this);
CRect rc;
GetClientRect(rc);
rc.top = rc.bottom / 2;
CFont *oldFont = dc.SelectObject(f);
dc.DrawText(s,rc,DT_CENTER);
dc.SelectObject(oldFont);
}
记得在退出程序的时候要
delete f;
能说说它的具体作用么?
void CStep4View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
delete f;
}
还有一个问题,就是实现缩放字体的功能后却会闪烁,怎么处理呢?
想防止闪烁没有什么好的办法,下面的方法可用,但可能会让用户感觉不爽
void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect)
{
CFrameWnd::OnSizing(fwSide, pRect);
LockWindowUpdate();
}