需要在客户区内显示一串字符,字符单行居中显示。
问题是:如何使得客户区内的字体跟随客户区大小的变化而变化?也就是说如果客户区大小发生变化,我须显示的文字依然能够全部显示,字体能够自动变化以配合客户区的变化。

解决方案 »

  1.   

    自己建立字体,字体的大小不就可以控制了嘛。
    然后WM_SIZE里重新计算字体的大小,然后...
      

  2.   

    //创建并设置字体
    CFont font;//成员对象、全局对象或静态对象

    m_font.CreateFont(
    MulDiv(10,-dc.GetDeviceCaps(LOGPIXELSY),72),//10:高度
    30,//30:宽度
    0,0,FW_NORMAL,0,0,0,
    ANSI_CHARSET,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
    VARIABLE_PITCH|FF_SWISS,
    _T("System"));//字体
    this->SetFont(&font);//CWnd*(可以是控件)

    font.DeleteObject();
      

  3.   

    henryzc() ,我就是不想自己计算呀,那太复杂了。
    谁有函数可以提供?
    up有分,不够可再加。
      

  4.   

    bluebohe(薄荷),没办法,一个人的力量有限,能够有现成的控件,谁还会想去自己重新开发?
      

  5.   

    一段自己计算的代码:
    {
    int nLen;
    LOGFONT aLogfont;
    CString str;
    CFont aFont;
    CRect aRect;
    ...
    GetClientRect(aRect);
    nLen = str.GetLength();
    aLogfont.lfWidth=aRect.Width()/nLen;
    aLogfont.lfHeight=aRect.Width()*2/nLen;
    ...
    aFont.CreateFontIndirect(&aLogfont);
    ...
    }
    谁还有更好的,大家共享。
      

  6.   

    createfont(0,0,...
    ...
    0,
    width/x,// 每个字的宽度
    ...
    "arial"
    )
      

  7.   

    只要设置映射模式为MM_ANISOTROPIC,不用改变字体大小。当然,字体要通过CreateFont创建。
      

  8.   

    很抱歉,我好久没来了!
    Mackz(在相互),能不能说得详细点?
      

  9.   

    To:handsomerun(毛毛)
    《VC技术内幕》第4版,前几章我以前看过,听你一说好像有点印象,等我翻翻书后再给回复。
      

  10.   

    参考《VC技术内幕》,简单的实现程序如下:
    void CEx05cwView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CRect aRect; GetClientRect(aRect);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(aRect.Width(),aRect.Height());
    pDC->SetViewportExt(aRect.Width(),aRect.Height());
    CView::OnPrepareDC(pDC, pInfo);
    }
    void CEx05cwView::OnDraw(CDC* pDC)
    {
    CEx05cwDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int nLen;
    CFont aFont;
    CRect aRect;
    CString strText; strText.Format("This is a test for CFont !");
    nLen = strText.GetLength();
    GetClientRect(aRect);
    aFont.CreateFont(aRect.Height(),aRect.Width()/nLen,0,0,0,FALSE,FALSE,0,ANSI_CHARSET,
    OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");
    CFont* pOldFont = pDC->SelectObject(&aFont);
    pDC->TextOut(0,0,strText);
    pDC->SelectObject(pOldFont);
    }
    关键点有两个:
    一、使用MM_ANISOTROPIC映射模式。
    二、指定字体的宽和高。
    一点体会大家共享。