单文档中有两行,一行是日期,一行是时间,我想设置这两行的字体,让它们随着单文档窗口的缩放实现字体的大小变化,请问怎么实现?谢谢~

解决方案 »

  1.   

    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;
      

  2.   

    请问程序结束时的delete f;是加在下面的么?还是在处理关闭程序的消息中添加的?
    能说说它的具体作用么?
    void CStep4View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    delete f;
    }
      

  3.   

    是在OnDestroy里面加,不过也不用太注意它啦,程序都结束了也不怕泄漏了,加上它只不过是个习惯问题
      

  4.   

    drawtext是不是很难定位,并不是真的在中间~
    还有一个问题,就是实现缩放字体的功能后却会闪烁,怎么处理呢?
      

  5.   

    想要精确定位的话就要自己计算了,要考虑到字体大小和窗体大小。
    想防止闪烁没有什么好的办法,下面的方法可用,但可能会让用户感觉不爽
    void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) 
    {
    CFrameWnd::OnSizing(fwSide, pRect);
    LockWindowUpdate();
    }