编辑类的类名是(edit),然后调用CreateWindow创建一个矩形区域,然后可以在里面编辑文字
例如:
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE|WS_BORDER,
0, 0,100, 100, hwnd, (HMENU)ID_EDIT,
hInst, NULL);
return 0;
![](http://img.blog.csdn.net/20151227123601374)
这是一个简单的带边框的单行编辑器。
一般编辑控件默认只有一行,但是可以通过添加控件的窗口风格来改变
编辑控件的窗口风格:
文本对齐风格:ES_LEFT ES_RIGHT ES_CENTER
多行文本:ES_MULTILINE
例如:
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE|WS_BORDER|ES_LEFT
|ES_MULTILINE,
0, 0,100, 100, hwnd, (HMENU)ID_EDIT,
hInst, NULL);
return 0;
自动水平滚动:ES_AUTOHSCROLL(如果用了这个风格就不会自动换行,必须手动按回车换行)
垂直滚动:ES_AUTOVSCROLL
使用了滚动风格就要使用窗口滚动条风格了,不然就看不到滚动前的字了,添加滚动条风格和
正常窗口一样
例如:
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE|WS_BORDER|ES_LEFT |ES_MULTILINE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL
|ES_AUTOVSCROLL,
0, 0,100, 100, hwnd, (HMENU)ID_EDIT,
hInst, NULL);
return 0;
编辑控件中的滚动条已经自动关联键盘和鼠标操作了,所以不必像窗口滚动条一样自己设置。
编辑控件边框:WS_BORDER
失去输入焦点文本仍高亮显示:ES_NOHIDSEL
例如:
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE|WS_BORDER|ES_LEFT |ES_MULTILINE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL
|ES_AUTOVSCROLL|ES_NOHIDESEL,
0, 0,100, 100, hwnd, (HMENU)ID_EDIT,
hInst, NULL);//ID_EDIT是宏定义 1
return 0;
可以让编辑控件窗口和父窗口客户区一样大
例如:
case WM_SIZE:
MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
return 0;
这个可以根据父窗口的改变而改变。
如果想窗口一打开编辑控件就有输入焦点
例如:
case WM_SETFOCUS:
SetFocus(hwndEdit);
return 0;
编辑控件的通知消息:
编辑控件给父窗口消息处理程序发送WM_COMMAND消息,
和按钮控件一样,wParam和lParam变量的含义是相同的:
LOWORD (wParam) 子窗口ID
HIWORD (wParam) 通知码
lParam 子窗口句柄
编辑控件的发出的通知码:
EN_SETFOCUS 编辑控件已经获得输入焦点
EN_KILLFOCUS 编辑控件已经失去输入焦点
EN_CHANGE 编辑控件的内容将改变
EN_UPDATE 编辑控件的内容已经改变
EN_ERRSPACE 编辑控件执行已经超出中间
EN_MAXTEXT 编辑控件在插入时执行超出空间
EN_HSCROLL 编辑控件的水平滚动条已经被按下
EN_VSCROLL 编辑控件的垂直滚动条已经被按下
例如:
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_EDIT:
if (HIWORD(wParam) == EN_KILLFOCUS)
{
MessageBox(hwnd, TEXT("编辑控件已经失去输入焦点"), NULL, 0);
}
else if (HIWORD(wParam) == EN_CHANGE)
{
MessageBox(hwnd, TEXT("编辑控件的内容将改变"), NULL, 0);
}
else if (HIWORD(wParam) == EN_UPDATE)
{
MessageBox(hwnd, TEXT("编辑控件的内容已经改变"), NULL, 0);
}
else if (HIWORD(wParam) == EN_ERRSPACE)
{
MessageBox(hwnd, TEXT("编辑控件执行已经超出中间"), NULL, 0);
}
else if (HIWORD(wParam) == EN_MAXTEXT)
{
MessageBox(hwnd, TEXT("编辑控件在插入时执行超出空间"), NULL, 0);
}
else if (HIWORD(wParam) == EN_HSCROLL)
{
MessageBox(hwnd, TEXT("编辑控件的水平滚动条已经被按下"), NULL, 0);
}
else if (HIWORD(wParam) == EN_VSCROLL)
{
MessageBox(hwnd, TEXT("编辑控件的垂直滚动条已经被按下"), NULL, 0);
}
break;
}
return 0;
在编辑框中插入文本,可以使用SetWindowText函数。
获取用GetWindowText函数
例如:
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE|WS_BORDER|ES_LEFT
|ES_MULTILINE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL
|ES_AUTOVSCROLL|ES_NOHIDESEL,
0, 0,100, 100, hwnd, (HMENU)ID_EDIT,
hInst, NULL);
SetWindowText(hwndEdit, L"请输入文本");
return 0;
编辑控件的消息:
WM_CUT 剪切
WM_COPY 复制
WM_CLEAR 清除
WM_PASTER 粘贴
获取当前选择文本的初始位置和终止位置
SendMessage(hwndEdit,EM_CETSEL,(WPARAM)&iStart,(LPARAM)&iEnd);
终止位置是选择的最后一个字符+1
选择文本
SendMessage(hwndEdit,EM_SETSEL,iStart,iEnd);
用其它文本取代当前选择的文本
SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)szString);
获取编辑器的行数
iCount=SendMessage(hwndEdit,EM_GETLINECOUNT,0,0);
对于某一个指定的行,可以获得从编辑缓冲区的起点到这行的位移量
iOffset=SendMessage(hwndEdit,EM_LINELENGTH,iLine,0);
可以用如下函数来复制某一行到缓冲区
iLength=SendMessage(hwndEdit,EM_GETLINE,iLine,(LPARAM)szBUFFER);