- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
编辑框(edit)
控件样式
创建控件
初始控件
消息处理
示例代码
编辑框(edit)
控件样式
- 编辑框(Edit Control)是Windows中最常用的控件之一,用于接收用户输入的文本信息。编辑框可以设置为单行或多行,支持多种文本格式和输入限制。
- 风格样式
WS_CHILD
:子窗口样式。WS_VISIBLE
:控件创建时可见。WS_BORDER
:控件周围有边框。WS_TABSTOP
:用户可以使用Tab键切换到此控件。
- 控件样式
ES_AUTOHSCROLL
:当用户输入超过控件宽度时,文本自动向左滚动。ES_MULTILINE
:多行编辑框。ES_WANTRETURN
:在多行编辑框中,用户按下Enter键时插入一个换行符,而不是发送WM_COMMAND
消息。
创建控件
- 使用
CreateWindow
或CreateWindowEx
函数创建编辑框控件。需要指定控件类名为"EDIT"
,并设置相应的窗口样式。
初始控件
- 设置和获取文本
- WM_SETTEXT:设置编辑框的文本。
- WM_GETTEXT:获取编辑框的文本。
- WM_GETTEXTLENGTH:获取编辑框文本的长度。
- 控制编辑框行为
- EM_SETREADONLY:设置编辑框为只读模式。
- EM_SETSEL:选择编辑框中的文本。
- EM_REPLACESEL:替换选定的文本。
- EM_GETSEL:获取当前选定的文本范围。
消息处理
- 通知消息
- EN_CHANGE:编辑框内容发生改变。
- EN_UPDATE:编辑框将要更新显示。
- EN_SETFOCUS:编辑框获得输入焦点。
- EN_KILLFOCUS:编辑框失去输入焦点。
示例代码
#include <Windows.h>
#include "resource.h"#define ID_EDIT_SINGLELINE 1
#define ID_EDIT_MULTILINE 2
#define ID_EDIT_PASSWORD 3
#define ID_EDIT_READONLY 4HINSTANCE ghInstance = 0;LRESULT CALLBACK MainWindowProc (HWND, UINT, WPARAM, LPARAM);INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ghInstance = hInstance;// 注册窗口WNDCLASSEX wndclass = { 0 };wndclass.cbSize = sizeof(WNDCLASSEX);wndclass.style = NULL;wndclass.lpfnWndProc = MainWindowProc;wndclass.cbClsExtra = NULL;wndclass.cbWndExtra = NULL;wndclass.hInstance = hInstance;wndclass.hIcon = NULL;wndclass.hCursor = NULL;wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;wndclass.lpszMenuName = NULL;wndclass.lpszClassName = TEXT("0xCC");wndclass.hIconSm = NULL;if (!RegisterClassEx(&wndclass)){MessageBox(NULL, TEXT("RegisterClassEx Failed"), TEXT("Error"), MB_OK);return 1;}// 创建窗口HWND hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("0xCC"),TEXT("CreateWindowEx"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,960,540,NULL,NULL,hInstance,NULL);if (hwnd == NULL){MessageBox(NULL, TEXT("CreateWindowEx Failed"), TEXT("Error"), MB_OK);return 1;}// 显示窗口ShowWindow(hwnd, SW_SHOWDEFAULT);// 更新窗口UpdateWindow(hwnd);// 消息处理MSG msg = { 0 };while (GetMessage(&msg, 0, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}// 窗口过程
LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{static HWND hEditLine, hMultiple, hPassWord, hReadOnly;switch (uMsg){case WM_CREATE:{//创建控件hEditLine = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,10, 10, 200, 25,hwnd,HMENU(ID_EDIT_SINGLELINE),ghInstance,NULL);hMultiple = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,10, 50, 200, 100,hwnd,HMENU(ID_EDIT_MULTILINE),ghInstance,NULL);hPassWord = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_PASSWORD,10, 165, 200, 25,hwnd,HMENU(ID_EDIT_PASSWORD),ghInstance,NULL);hReadOnly = CreateWindow(TEXT("EDIT"),TEXT("ES_READONLY"),WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_READONLY,10, 205, 200, 25,hwnd,HMENU(ID_EDIT_READONLY),ghInstance,NULL);// 初始控件// 设置文本//SendMessage(hEditLine, WM_SETTEXT, 0, (LPARAM)TEXT("Hello World"));// 获取文件//TCHAR szBuffer[0xFF] = { 0 };//SendMessage(hEditLine, WM_GETTEXT, 0xFF, (LPARAM)szBuffer);// 获取长度//DWORD dwLength = SendMessage(hEditLine, WM_GETTEXTLENGTH, 0, 0);// 设置风格SendMessage(hEditLine, EM_SETREADONLY, TRUE, 0);break;}case WM_DESTROY:{PostQuitMessage(0);break;}case WM_COMMAND:{switch (HIWORD(wParam)){case EN_CHANGE:{if (LOWORD(wParam) == ID_EDIT_SINGLELINE){TCHAR szBuffer[0xFF] = { 0 };SendMessage(hEditLine, WM_GETTEXT, 0xFF, (LPARAM)szBuffer);}}//case EN_SETFOCUS://{// if (LOWORD(wParam) == ID_EDIT_MULTILINE)// {// MessageBox(0, TEXT("EN_SETFOCUS"), 0, 0);// }// break;//}case EN_KILLFOCUS:{if (LOWORD(wParam) == ID_EDIT_MULTILINE){MessageBox(0, TEXT("EN_KILLFOCUS"), 0, 0);}break;}break;}}default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}}