编辑框的大小跟着输入文字的变化而改变大小

编辑框的大小随着输入文字的变化而改变大小
void MyEditBox::OnEnChange()
{
     CString str;
     this->GetWindowText(str);

     CDC *pDC = this->GetDC();
      if(pDC != NULL)
      {
          CSize textSize = pDC->GetTextExtent(str);        // 该函数返回 屏幕字串的逻辑长度
           this->ReleaseDC(pDC);

           ::SetWindowPos(this->GetSafeHwnd(), HWND_TOP, 10, 10, textSize.cx, textSize.cy, SWP_NOMOVE);

            this->Invalidate();
      }
}
目标是实现编辑框的大小随着字符数目的变化而变化。 
现在问题是编辑框的大小总是比字串的长度要长,不能比较精确的把编辑框设置成字串的长度。 


   
------解决方案--------------------
可能DC字体不是当前显示的字体, 选人字体看看

CFont *pOldFont = pDC->SelectObject(GetParent()->GetFont());
CSize textSize = pDC->GetTextExtent(str); 
pDC->SelectObject(pOldFont);

------解决方案--------------------

在调用GetTextExtent或者GetTextExtentPoint32函数之前,DC一定要选取当前字符串所使用的字体

------解决方案--------------------
引用:
void MyEditBox::OnEnChange()
{
     CString str;
     this->GetWindowText(str);

     CDC *pDC = this->GetDC();
      if(pDC != NULL)
      {
          CSize textSize = pDC->GetTextExtent(str);        // 该函数返回 屏幕字串的逻辑长度
           this->ReleaseDC(pDC);

           ::SetWindowPos(this->GetSafeHwnd(), HWND_TOP, 10, 10, textSize.cx, textSize.cy, SWP_NOMOVE);

            this->Invalidate();
      }
}
目标是实现编辑框的大小随着字符数目的变化而变化。 
现在问题是编辑框的大小总是比字串的长度要长,不能比较精确的把编辑框设置成字串的长度。 


   

需要通过设置字体来获取大小