Windows编辑类

来源:互联网 发布:手机制作软件 编辑:程序博客网 时间:2024/06/05 19:14

编辑类的类名是(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);

0 0