特殊说明:版权归个人所有,请勿转载,谢谢合作。
编辑框(Edit Box)控件是一个能够接受输入的控件。可以在编辑框中输入英文、中文或一些符号,它是一个简易的文本编辑器。接收的文本可以是单行,也可以是多行。
g_hEditWnd = CreateWindow("EDIT", "MyEdit",
WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 100, 20,
hWnd, (HMENU)ID_BUTTON_PUSH, g_hIns, NULL);
编辑框创建过程中,CreateWindow函数的第三个参数dwStyle用来指定编辑框控件的风格(可以是风格的组合),如表10.3所示。
- 表10.3 编辑框控件风格
| 风格 | 描述 |
| ES_AUTOHSCROLL | 自动增加水平滚动条 |
| ES_AUTOVSCROLL | 自动增加垂直滚动条,当按下Enter键后,自动切换到下一页 |
| ES_CENTER | 文本居中 |
| ES_LEFT | 文本左对齐 |
| ES_LOWERCASE | 把输入的字母全部转换成小写字母 |
| ES_MULTILINE | 支持多行,若不指定ES_AUTOVSCROLL风格,则会在窗口中正文装满时发出警告 |
| ES_NOHIDESEL | 默认时,当编辑框失去焦点时,选中的文本将隐藏,当编辑框获得输入焦点时又显示出来 |
| ES_OEMCONVERT | 使编辑框中的正文内容可以在ANSI码转与OEM码相互转换 |
| ES_PASSWORD | 所有输入内容以“*”显示 |
| ES_RIGHT | 文本右对齐 |
| ES_UPPERCASE | 把输入的字母全部转换成大写字母 |
| ES_READONLY | 设置正文文本内容为只读 |
| ES_WANTRETURN | 接收回车符。如果不指定该风格,在按回车时,响应默认的按钮命令 |
多行显示编辑框的内容时,风格取值为 ES_MULTILINE。一般对于多行文本编辑框还需设置 ES_AUTOVSCROLL,这样可以输入多行文本,并自动滚动。在默认的状况下,编辑框是没有边框的,如果需要边框,需要设置WS_BORDER。另外还可规定编辑框里的文本是否为只读,风格属性设置为ES_READONLY为只读模式。当需要建立密码编辑框时,只要设置ES_PASSWORD风格属性即可。
Win32 SDK编程中,编辑框是以WM_COMMAND的方式发送消息给窗口,在捕获消息的同时,过程处理函数中的wParam与lParam参数具有一定的含义。wParam的低位字节包含编辑框的标识符,高位字节包含通知消息的类型,lParam包含编辑框的句柄。编辑框的消息有很多种,如表10.4所示,列出了编辑框的通知消息(通知消息为wParam的高位字节)。
- 表10.4 编辑框通知消息
| 通知消息 | 描述 |
| EN_CHANGE | 编辑框改变消息,有内容修改或输入时响应 |
| EN_ERRSPACE | 编辑框无法申请足够的动态内存时,发送该消息 |
| EN_KILLFOCUS | 编辑框失去焦点时,发送该消息 |
| EN_SETFOCUS | 编辑框获得输入焦点时,发送该消息 |
| EN_MAXTEXT | 输入的字符超过了规定的最大字符时,发送该消息 |
| EN_UPDATE | 当编辑框被改变时发送该消息,与EN CHANGE不同,它在编辑框重画前发送 |
| EM_CANUNDO | 检验编辑框是否可以执行取消操作 |
| EM_GETHANDLE | 得到内存区文本的句柄,不适用于单行文本模式 |
| EM_GETLIMITTEXT | 获得文本最大允许长度 |
| EM_GETLINE | 将指定行文本拷贝到字符串指针中 |
| EM_GETLINECOUNT | 获得编辑框中行的数量,即多少行 |
| EM_GETMARGINS | 获得编辑框的边框宽度 |
| EM_GETMODIFY | 确认编辑框是否被修改 |
| EM_GETPASSWORDCHAR | 获得密码编辑框设置的密码字符 |
| EM_GETRECT | 获得文本矩形区域 |
| EM_GETSEL | 获得选中的文本 |
| EM_GETTHUMB | 获得编辑框滚动条的位置 |
| EM_GETWORDBREAKPROC | 获得换行函数的地址 |
| EM_LIMITTEXT | 限定用户能够输入的字符数目 |
| EM_LINEINDEX | 获得字符所在的行号 |
| EM_LINELENGTH | 获得行的长度 |
| EM_LINESCROLL | 文本加入滚动模式 |
| EM_SCROLL | 多行编辑框中垂直滚动文本 |
| EM_SCROLLCARET | 将插入符移到编辑框的可见区域 |
| EM_SETHANDLE | 设置文本内存缓冲区句柄 |
| EM_SETPASSWORDCHAR | 设置密码字符 |
| EM_SETTABSTOPS | 多行编辑框里设置制表符停止位置,不适用于单行编辑框 |
| EM_UNDO | 取消上一次操作 |
| WM_COPY | 拷贝消息 |
| WM_CTLCOLOREDIT | 只读编辑框,重绘时向父窗口发送该消息 |
| WM_CUT | 剪切消息 |
| WM_PASTE | 粘贴消息 |
| WM_UNDO | 取消上一次操作消息 |
编辑框控件的内容同样可以使用SetWindowText函数来设置显示的内容,使用GetWindowText函数来获得显示的内容。
【例10-3】实现了,当点击【MyButton】按钮时,显示编辑框中的内容;当对编辑框内容更改时,提示“改变事件。”信息框。
//**************************************************************
// NAME : Demo_10
//**************************************************************
// POWER : Copyright (c) 2012 for lixinghua.
// AUTHOR : 2012-8-3 11:00 Create by lixinghua for functions.
// VERSION : V1.0.0.1
// NOTE : 手工整理的创建窗口的代码,本程序只创建一个名称为MyWin的窗口。
//**************************************************************
//
#include <windows.h>
#include <stdio.h>
// 宏定义,分别定义按钮的ID
#define ID_BUTTON_PUSH 0x01
#define ID_EDIT_TEXT 0x02
// 回调函数,用于系统消息的处理。
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hIns = NULL;
HWND g_hButtonWnd = NULL; // 按钮句柄
HWND g_hEditWnd = NULL; // 编辑框句柄
//-----------------------------------------------------------------------------
// FUNC : 入口函数
//-----------------------------------------------------------------------------
// IN : hInstance,进程的实例句柄;
// hPrevInstance,前一个进程实例句柄,默认为NULL即可;
// lpCmdLine,命令行参数;
// nCmdShow,当前窗口显示状态。
// OUT : void
// RETURN : 返回为整型,代表窗口的状态,其中APIENTRY描述了
// 压栈的顺序。
// AUTHOR : 2012-2-6 11:18 Create by lixinghua for functions.
// NOTE : 此函数为Win32入口函数。
//-----------------------------------------------------------------------------
//
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 定义所用到的参数
//
char szWindowClass[] = { "WinClsName" };
// 窗口类的名称
HWND hWnd = NULL; // 用于存放窗口句柄
//char szTitle[] = { "五子棋" }; // 窗口标题名称
char szTitle[] = { "MyWin" }; // 窗口标题名称
MSG msg; // 存放消息的结构体,
// 由系统提供
// 保存进程实例句柄
g_hIns = hInstance;
// 1. 设计一个窗口类
//
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = NULL;
// 2. 注册窗口
//
RegisterClassEx(&wcex);
// 3. 创建窗口
//
HMENU hMenu = NULL;
hWnd = CreateWindow(szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
0, CW_USEDEFAULT, 0, NULL, hMenu, hInstance, NULL);
// 判断创建是否成功
if (!hWnd)
{
return FALSE;
}//end if
// 4. 显示并更新窗口
ShowWindow(hWnd, nCmdShow); // 请注意 nCmdShow 参数
UpdateWindow(hWnd);
// 5. 进入消息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}//end while
return 0;
}
//-----------------------------------------------------------------------------
// FUNC : 回调函数
//-----------------------------------------------------------------------------
// IN : hWnd,窗口句柄;
// message,要处理的消息ID,以此来区分消息;
// wParam,消息参数,根据消息的不同内容也有所不同;
// lParam,消息参数,根据消息的不同内容也有所不同。
// OUT : void
// RETURN : void
// AUTHOR : 2012-2-6 11:36 Create by lixinghua for functions.
// NOTE : 此函数用于系统消息的处理。
//-----------------------------------------------------------------------------
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps; // 结构体包含了用于绘制
// 窗口客户区的信息
HDC hdc; // 设备环境句柄
int wmId, wmEvent;
char szContext[512] = { 0 };
// 消息处理
//
switch (message)
{
// 创建窗口时响应的事件
case WM_CREATE:
// 创建按钮
g_hButtonWnd = CreateWindow("BUTTON", "MyButton",
WS_CHILD | WS_VISIBLE, 160, 50, 100, 20,
hWnd, (HMENU)ID_BUTTON_PUSH, g_hIns, NULL);
g_hEditWnd = CreateWindow("EDIT", "MyEdit",
WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 100, 20,
hWnd, (HMENU)ID_EDIT_TEXT, g_hIns, NULL);
break;
// 菜单响应事件
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
// 捕获改变事件消息,编辑框中内容改变时触发此消息。
if(wmId == ID_EDIT_TEXT && wmEvent == EN_CHANGE)
{
MessageBox(hWnd, "改变事件。", "提示", MB_OK);
}//end if
switch (wParam)
{
// 点击按钮时,捕获编辑框的内容,并显示。
case ID_BUTTON_PUSH:
// 获得EDIT中的内容
GetWindowText(g_hEditWnd, szContext, 512);
// 显示提示信息
MessageBox(hWnd, szContext, "提示", MB_OK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}//end switch
break;
// 图形绘制事件
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
// 窗口销毁消息,关闭窗口时响应。
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
// 调用系统默认消息处理,即交给系统处理。
return DefWindowProc(hWnd, message, wParam, lParam);
}//end switch
return 0;
}
点击【MyButton】按钮后显示如图10.3所示。

- 图10.3 点击按钮后的界面
修改编辑框中的内容时,显示如图10.4所示。

- 图10.4 修改编辑框内容界面
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。