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