阅读量:19
- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
编辑框(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 4 HINSTANCE 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); } }