向Edit控件设置文本的2种方法
2017-06-17 16:37
399 查看
序
在cm中对SetWindowText下了断点,发现并不是每个Edit控件的内容设置都拦截到了。怀疑是用SendMessage设置的文本,用Spy++看到了消息是EM_REPLACESEL.
去查资料,可以用SendMessage(EM_REPLACESEL)设置消息。
再去cm中查调用点,果真每次Edit中设置文本,都会被断下.
用SendMessage(EM_REPLACESEL)来向原始内容后附加内容比较方便, 不需要用DDX.也不需要自己拼装内容, 只需要附加文本内容就可以.
以前向Edit附加内容,都是先将原始内容取回来,再拼新内容,再将新内容设置到Edit.
在cm中看到的这种实现,效率高很多.
实验
void Ctest_edit_controlDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here CWnd* pWnd = GetDlgItem(IDC_EDIT_TEST); if (NULL != pWnd) { // 向Edit控件设置文本的2种方法 // 1. call SetWindowText or SendMessageA(WM_SETTEXT) // #define WM_SETTEXT 0x000C // ::SendMessageA(pWnd->m_hWnd, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"helloEdit"); // 2. call SendMessage(EM_SETSEL) then call EM_REPLACESEL // #define EM_SETSEL 0x00B1 // #define EM_REPLACESEL 0x00C2 // 在原始内容上附加文本消息 // Edit控件要设置风格:多行,允许回车 // 搜索”push 0c2h“, 可以找到SendMessage调用 ::SendMessage(pWnd->m_hWnd, EM_SETSEL, WPARAM(-1), LPARAM(-1) ); ::SendMessage(pWnd->m_hWnd, EM_REPLACESEL, WPARAM(TRUE), LPARAM("1_helloEdit\r\n")); } }
cm中的写法
cm中的写法和我做的实验不同,应该是我的实验效率高吧? SendMessage只调用了2次。cm中附加数据调用了SendMessage3次.
::SendMessage(pWnd->m_hWnd, EM_SETSEL, WPARAM(0), LPARAM(0) ); ::SendMessage(pWnd->m_hWnd, EM_SCROLLCARET, WPARAM(0), LPARAM(0) ); ::SendMessage(pWnd->m_hWnd, EM_REPLACESEL, WPARAM(TRUE), LPARAM("text"));
相关文章推荐
- android控件文本样式的设置方法
- Android控件EditText中文本光标位置的设置
- 实现点击按钮获取和设置edit文本的方法
- MFC中设置EDIT控件中光标显示在字符串末尾的方法
- upLoad控件设置禁止输入的方法
- 控件的颜色设置(本景色,文本色,文本背景色)
- 设置List控件的文本对齐方式.
- 设置FormItem容器控件的文本对齐方式。
- 获取控件上的文本值---例子是CEdit 的七种方法
- c#.net 文本编辑控件——设置RichTextBox的字体和字体大小
- 通过OnCtlColor函数的重载对静态控件进行文本和背景颜色设置
- C# WinForm 中控件(Label,Button等) 文本自动换行 解决方法
- Flex的NumericStepper控件中如何通过textAlign样式设置文本对齐方式的例子
- Flex中如何通过tabStyleName, tabWidth和textAlign样式,设置TabBar控件内文本对齐方式
- WebBrowser控件的代理设置方法
- List容器存储对话框控件句柄,并访问list数据设置控件文本
- VC中控件字体与文本颜色的设置
- 遍历页面控件并设置值的一种方法...
- Edit控件文字居右的方法
- [MFC]设置对话框所有控件字体为同一字体的简单方法