Drecik学习经验分享
转载请注明出处:http://blog.csdn.net/drecik__/article/details/8112844
Edit控件是一个很强大的输入控件,可以处理很多样式,通过VS的控件属性来设置,有单行,多行,密码框,滚动条等。
和Button控件一样,编辑框想父窗口发送WM_COMMAND消息,各个参数的意义也和Button控件的一样:
- LOWORD(wParam) 子窗口ID
- HIWORD(wParam) 通知码
- lParam 子窗口句柄
其中通知码可以如下所示:
- EN_SETFOCUS 编辑控件获得输入焦点
- EN_KILLFOCUS 编辑控件失去输入焦点
- EN_CHANGE 编辑控件的内容将改变
- EN_UPDATE 编辑控件的内容已变化
- EN_ERRSPACE 编辑控件没有空间了
- EN_MAXTEXT 编辑控件没有控件完成插入了
- EN_HSCROLL 编辑控件水平滚动条被单击了
- EN_VSCROLL 编辑控件垂直滚动条被单击了
获得Edit控件输入的内容可以通过之前讨论过的通用函数(参考前面的博文),GetWindowText等。
下面列举下常用的使用SendMessage发送给编辑控件的消息:
// 剪切,复制,删除当前选择内容;
SendMessage( hWndEdit, WM_CUT, 0, 0 );
SendMessage( hWndEdit, WM_COPY, 0, 0 );
SendMessage( hWndEdit, WM_CLEAR, 0, 0 );
// 将剪贴板上的文本插入到编辑控件的当前位置;
SendMessage( hWndEdit, WM_PASTE, 0, 0 );
// 获得当前选择文本的初始位置和终止位置,终止位置时最后一个字符+1;
SendMessage( hWndEdit, EM_GETSEL, &iStart, &iEnd );
// 选择文本;
SendMessage( hWndEdit, EM_SETSEL, iStart, iEnd );
// 使用其他文本取代当前选择的文本;
SendMessage( hWndEdit, EM_REPLACESEL, 0, (LPARAM)szString );
// 获得编辑器的行数;
iCount = SendMessage( hWndEdit, EM_GETLINECOUNT, 0, 0 );
// 获得从编辑缓冲区起点到这行的位移量,如果iLine为-1则默认为插入符号所在行;
iOffset = SendMessage( hWndEdit, EM_LINEINDEX, iLine, 0 );
// 得到所在行的的长度;
iLength = SendMessage( hWndEdit, EM_LINELENGTH, iLine, 0 );
// 复制某一行到缓冲区;
iLength = SendMessage( hWndEdit, EM_GETLINE, iLine, (LPARAM)szBuffer );