编辑框的大小跟着输入文字的变化而改变大小
编辑框的大小随着输入文字的变化而改变大小
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字体不是当前显示的字体, 选人字体看看
------解决方案--------------------
在调用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();
}
}
目标是实现编辑框的大小随着字符数目的变化而变化。
现在问题是编辑框的大小总是比字串的长度要长,不能比较精确的把编辑框设置成字串的长度。
------解决方案--------------------
可能DC字体不是当前显示的字体, 选人字体看看
CFont *pOldFont = pDC->SelectObject(GetParent()->GetFont());
CSize textSize = pDC->GetTextExtent(str);
pDC->SelectObject(pOldFont);
------解决方案--------------------
在调用GetTextExtent或者GetTextExtentPoint32函数之前,DC一定要选取当前字符串所使用的字体
------解决方案--------------------
需要通过设置字体来获取大小