对于Win32窗口控件也说了不少了,今天来说说编辑框 Edit Control控件。
MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx
其实还是子窗口,static那节说的很明白了,就不重复了 ,这个控件的类名是Edit
创建两个edit control:
还是以我的博客“窗口详解”(地址:http://blog.csdn.net/zuishikonghuan/article/details/46378475)中的代码为基础,继续编写
HWND edit1 = 0; HWND edit2 = 0;
edit1 = CreateWindow(TEXT("Edit"), TEXT("Edit Control"), WS_CHILD | WS_VISIBLE | ES_LEFT, 200, 260, 100, 20, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); SendMessage(edit1, WM_SETFONT, (WPARAM)GetStockObject(17), 0); edit2 = CreateWindow(TEXT("Edit"), TEXT("多行Edit Control\r\nEdit Control"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | ES_AUTOVSCROLL, 250, 300, 150, 80, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); SendMessage(edit2, WM_SETFONT, (WPARAM)GetStockObject(17), 0);
1。多行编辑框
ES_MULTILINE
2。对齐方式
ES_CENTER(居中)ES_LEFT(左对齐)ES_RIGHT(右对齐)
注意:右对齐的多行编辑控件不能ES_AUTOHSCROLL风格,也就是说,他们不能水平滚动。
3。文本和输入方式
ES_LOWERCASE:使所有大写字符输入到编辑控件被转换成小写的。
ES_UPPERCASE:使所有小写字母转换为大写字母。
ES_NUMBER:只允许输入数字
ES_READONLY:改变编辑控件为只读状态。
ES_PASSWORD:(密码编辑框)使单行编辑控件中的所有字符显示为星号。应用程序可以定义一个不同的显示字符(用EM_SETPASSWORDCHAR消息)
如果一个编辑控件使用Comctl32.dll版本6。那么使用黑色圆的默认字符。在编辑控件从以前版本的公共控件,默认的字符是一个星号。
ES_OEMCONVERT:使文本输入到编辑控件从Windows转换字符设置为OEM字符集,然后回到Windows角色集。这确保适当的字符转换当应用程序调用CharToOem函数将一个Windows在编辑控件OEM字符的字符串。ES_OEMCONVERT最为有用的编辑控件包含文件名,将用于文件系统不支持Unicode。
4。接收回车键:
对于多行编辑框有效。
ES_WANTRETURN:当用户按下回车键时换行。没有ES_WANTRETURN时,用户必须按CTRL + ENTER键插入一个回车。
5。其他:
WS_VSCROLL:带有垂直滚动条
WS_HSCROLL:带有水平滚动条
ES_AUTOHSCROLL:当单行输入的文本宽度大于编辑框的宽度时自动水平滚动
ES_AUTOVSCROLL:当输入的文本高度大于编辑框的高度时自动垂直滚动
另:扩展风格 WS_EX_CLIENTEDGE
用途:带有三维边框
代码:
edit3 = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("Edit"), TEXT("Edit Control"), WS_CHILD | WS_VISIBLE | ES_LEFT, 200, 180, 100, 20, hwnd, (HMENU)8, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); SendMessage(edit3, WM_SETFONT, (WPARAM)GetStockObject(17), 0);
效果图:
开启系统样式的时候:
未开启:
当edit control内容已被改变时,发送EN_CHANGE通知到父窗口(通过WM_COMMAND消息)。
MSDN:
wParam
The LOWORD contains the identifier of the edit control. The HIWORD specifies the notification code.
(低16位是编辑框的ID,高16位是通知码)
lParam
A handle to the edit control.(编辑框的句柄)
1。EM_GETSEL 获取选择部分的开始和结束字符位置
wParam
一个指向一个DWORD值的指针,接收的起始位置。这个参数可以是NULL。
lParam
一个指向一个DWORD值的指针,接收的结束位置(the position of the first unselected character after the end of the selection.拙劣翻译:在选择区域后的第一个没有选中的字符的位置)。这个参数可以是NULL。
如果没有选择,开始和结束值都是当前符号的位置。
2。EM_SETSEL 选中一个部分
wParam
一个DWORD值,开始位置。
lParam
一个DWORD值,结束位置。
如果开始是0,结束是-1,所有的文本都会被选中。如果开始是-1,会去掉所有选中的部分。
3。复制剪切删除粘贴
WM_COPY:复制选中文本
WM_CUT:剪切选中文本
WM_CLEAR:删除选中文本
WM_PASTE:将剪贴板上的文本粘贴到当前输入位置
4。 EM_REPLACESEL:用其他文本来替代选中的文本
例如:
SendMessage(hedit, EM_REPLACESEL,0, (LPARAM)字符串指针);
5。EM_GETLINECOUNT:统计输入的行数
例如:
行数=SendMessage(hedit,EM_GETLINECOUNT,0,0);
1。设置文本 SetWindowText
函数原型:
BOOL WINAPI SetWindowText( _In_ HWND hWnd, _In_opt_ LPCTSTR lpString );参数1:edit control(或其他窗口)的句柄
2。获取文本长度 GetWindowTextLength
函数原型:
int WINAPI GetWindowTextLength( _In_ HWND hWnd );
参数1:edit control(或其他窗口)的句柄
返回值:文本长度
3。获取文本 GetWindowText
函数原型:
int WINAPI GetWindowText( _In_ HWND hWnd, _Out_ LPTSTR lpString, _In_ int nMaxCount );参数1:edit control(或其他窗口)的句柄