您的位置:首页 > 其它

VC实现随内容改变高度的Edit Control

2015-02-06 15:09 288 查看
目的: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的大小

完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: