mfc中如何自动调整文本控件的大小
How to auto resize the text control in mfc
我想将文本放入 MFC 中的 IDC_TEXT。我想使用输入文本自动调整该控件的大小。我使用了我的代码,但它不起作用。你能帮我解决一下吗?
CFont *m_Font1 = new CFont;
CStatic * m_Label;
m_Font1->CreatePointFont(200, "Time New Roman");
m_Label = (CStatic *)GetDlgItem(IDC_TEXT);
m_Label->SetFont(m_Font1);
m_Label->SetWindowText( _T("") );
//Display text in thread
THREADSTRUCT* ts = (THREADSTRUCT*)param;
CDC* vDC_TXT;
vDC_TXT =ts->_this->GetDlgItem(IDC_TEXT)->GetDC();
ts->_this->GetDlgItem(IDC_TEXT)->SetWindowTextA(text.c_str());
//Update the length-
ts->_this->GetDlgItem(IDC_TEXT)->SetWindowPos(NULL, 0, 0, 1000, 1000, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
然而,数字(1000,1000)是我手定的。我想根据文本大小自动更改。可以让我解决吗?
更新:
如果字体大小相同,只有文本不同,那么您应该可以重新使用旧字体:
void ChangeSize()
{
CWnd* dlgItem = GetDlgItem(IDC_STATIC1);
if (!dlgItem)
return;
CString s;
dlgItem->GetWindowText(s);
CDC dc;
dc.CreateCompatibleDC(NULL);
dc.SelectObject(dlgItem->GetFont());
CRect r;
dlgItem->GetClientRect(&r);
if (s.Find('\n') < 0)
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE | DT_EDITCONTROL);
else
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_EDITCONTROL);
dlgItem->SetWindowPos(0, 0, 0, r.Width(), r.Height(), SWP_NOMOVE);
}
上一个关于何时更改字体的答案:
m_Font1
应该声明为成员数据和setup setup一次,在别处创建和清理。它认为这就是你在做的事情。
然后可以绘制文字函数求文字大小,调整控件大小如下
void ChangeSize()
{
CWnd* dlgItem = GetDlgItem(IDC_STATIC1);
if (!dlgItem)
return;
CString s;
dlgItem->GetWindowText(s);
CDC dc;
dc.CreateCompatibleDC(NULL);
//or just use CClientDC dc(this) if device context is available
dc.SelectObject(m_font);
CRect r;
dlgItem->GetClientRect(&r);
if (s.Find('\n') < 0)
{
//change width/height for single line text
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE | DT_EDITCONTROL);
}
else
{
//change height for multiple-line text
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_EDITCONTROL);
}
dlgItem->SetWindowPos(0, 0, 0, r.Width(), r.Height(), SWP_NOMOVE);
dlgItem->SetFont(m_font, 1);
}
我想将文本放入 MFC 中的 IDC_TEXT。我想使用输入文本自动调整该控件的大小。我使用了我的代码,但它不起作用。你能帮我解决一下吗?
CFont *m_Font1 = new CFont;
CStatic * m_Label;
m_Font1->CreatePointFont(200, "Time New Roman");
m_Label = (CStatic *)GetDlgItem(IDC_TEXT);
m_Label->SetFont(m_Font1);
m_Label->SetWindowText( _T("") );
//Display text in thread
THREADSTRUCT* ts = (THREADSTRUCT*)param;
CDC* vDC_TXT;
vDC_TXT =ts->_this->GetDlgItem(IDC_TEXT)->GetDC();
ts->_this->GetDlgItem(IDC_TEXT)->SetWindowTextA(text.c_str());
//Update the length-
ts->_this->GetDlgItem(IDC_TEXT)->SetWindowPos(NULL, 0, 0, 1000, 1000, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
然而,数字(1000,1000)是我手定的。我想根据文本大小自动更改。可以让我解决吗?
更新:
如果字体大小相同,只有文本不同,那么您应该可以重新使用旧字体:
void ChangeSize()
{
CWnd* dlgItem = GetDlgItem(IDC_STATIC1);
if (!dlgItem)
return;
CString s;
dlgItem->GetWindowText(s);
CDC dc;
dc.CreateCompatibleDC(NULL);
dc.SelectObject(dlgItem->GetFont());
CRect r;
dlgItem->GetClientRect(&r);
if (s.Find('\n') < 0)
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE | DT_EDITCONTROL);
else
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_EDITCONTROL);
dlgItem->SetWindowPos(0, 0, 0, r.Width(), r.Height(), SWP_NOMOVE);
}
上一个关于何时更改字体的答案:
m_Font1
应该声明为成员数据和setup setup一次,在别处创建和清理。它认为这就是你在做的事情。
然后可以绘制文字函数求文字大小,调整控件大小如下
void ChangeSize()
{
CWnd* dlgItem = GetDlgItem(IDC_STATIC1);
if (!dlgItem)
return;
CString s;
dlgItem->GetWindowText(s);
CDC dc;
dc.CreateCompatibleDC(NULL);
//or just use CClientDC dc(this) if device context is available
dc.SelectObject(m_font);
CRect r;
dlgItem->GetClientRect(&r);
if (s.Find('\n') < 0)
{
//change width/height for single line text
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE | DT_EDITCONTROL);
}
else
{
//change height for multiple-line text
dc.DrawText(s, &r, DT_CALCRECT | DT_NOPREFIX | DT_EDITCONTROL);
}
dlgItem->SetWindowPos(0, 0, 0, r.Width(), r.Height(), SWP_NOMOVE);
dlgItem->SetFont(m_font, 1);
}