问题是这样的,我的目的是使一个静态文本框根据文字内容自适应大小,使用了GetOutputTextExtent函数 CRect rect;
CSize size;
CString strText = _T("staticsadfdfgwergdfgsdfgrsfcc"); CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
CDC* pDC = pWnd->GetDC(); size = pDC->GetOutputTextExtent(strText);
pWnd->GetWindowRect(&rect);
pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
pWnd->ReleaseDC(pDC);
pWnd->SetWindowText(strText);但是发现得到的结果不是很准确,请问是何故?

解决方案 »

  1.   

    因为你没有选择字体呀。字体呀。字体呀。
    从pWnd GetFont选入 pDC吧
      

  2.   

    因为你的pDC里的字体跟控件显示文字的字体不一致导致的,你要创建或者获取默认的字体
    然后选入pDC中再调用GetOutputTextExtent
      

  3.   


    你好,我按你说的搞了一下,发现字体大小仍然计算不对        CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
    CDC* pDC = pWnd->GetDC();
    CFont* pFont = pWnd->GetFont();
    pDC->SelectObject(pFont);

    size = pDC->GetOutputTextExtent(strText);
    pWnd->GetWindowRect(&rect);
    pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
    pWnd->ReleaseDC(pDC);
    pWnd->SetWindowText(strText);
      

  4.   


    CRect rect;
    CSize size;
    CString strText = _T("根据文本大小自适应文本框"); CWnd* pWnd = GetDlgItem(IDC_AUTOTEXT);
    CDC* pDC = pWnd->GetDC();
    CFont* pFont = pWnd->GetFont();
    pDC->SelectObject(pFont);
    size = pDC->GetOutputTextExtent(strText);
    pWnd->GetWindowRect(&rect);
    pWnd->SetWindowPos(0, 0, 0, size.cx, size.cy, SWP_NOMOVE|SWP_NOZORDER);
    pWnd->ReleaseDC(pDC);
    pWnd->SetWindowText(strText);没贴全,_T("根据文本大小自适应文本框"),看图片“框”字被截掉了,而且高度也被截了一部分
      

  5.   


    请问这个界面上显示的字体要如何获取,我一开始用pDC的字体,计算的长度明显长了,第二次我用pWnd->GetFont()得到的字体,计算长度又小了。这个显示的字体到底是哪个?
      

  6.   

    GetOutputTextExtent 是打印机的 DC
    GetTextExtent 是 屏幕 DC
      

  7.   


    结果还是一样。 不清楚GetTextExtent为什么就不能得到正确的大小呢。难道因为不是等宽字体? 非等宽字体又怎么搞?