目的:EditControl宽度不变,高度随内容的改变,可大可小。
一 新建一个对话框项目,对话框ID为IDD_EDITTEST_DIALOG,向Dialog中添加一个EditControl。设置Edit Control的ID为IDC_EDIT_TEST。为Edit Control添加变量,变量类型为CEdit,变量名为m_Edit_ctlTest 变量类别为control,控件类型为EDIT.
Edit Control 属性设置
1 Want Retun为True
2 Multiline为 True
3 Auto Hscroll为False
4 Auto Vscroll为True
5 Vertical Scroll为True
二 为Edit Control添加 控件事件EN_CHANGE 该事件表示指示文本更改以后显示已更新
IDE会自动增加代码
1 EditTestDlg.h 头文件中增加
public:
afx_msg void OnEnChangeEditTest();
2 EditTestDlg.cpp 实现文件中增加
1)消息映射
ON_EN_CHANGE(IDC_EDIT_TEST, &CEditTestDlg::OnEnChangeEditTest)
2)成员函数
void CEditTestDlg::OnEnChangeEditTest()
{
}
三 在OnEnChangeEditTest函数中 添加代码
CEdit* edit = (CEdit*)GetDlgItem(IDC_EDIT_TEST);
CString text;
edit->GetWindowText(text);
//获取Edit Control中的内容
CDC* dc = edit->GetDC();
//获取设备指针
CFont* font = edit->GetFont();
//获取当前字体
CFont* oldFont = dc->SelectObject(font);
//设置当前设备
CSize size = dc->GetTextExtent(text);
//以CSize的形式返回字符串的高度和宽度
dc->SelectObject(oldFont);
edit->ReleaseDC(dc);
//释放设备
int i=m_Edit_ctlTest.GetLineCount();
//获取Edit Control中内容的行数
RECT rect;
m_Edit_ctlTest.GetWindowRect(&rect);
ScreenToClient(&rect);
//屏幕坐标转换为客户区的坐标也就是Edit Control相对于Dialog的坐标
rect.bottom=rect.top+(i+1)*size.cy;
//加是为了Control底部留下一段距离
m_Edit_ctlTest.MoveWindow(&rect);
//改变Edit Control的大小
完成