Windows图形界面(GUI)-SDK-C/C++ - 编辑框(edit)

avatar
作者
猴君
阅读量:19

目录

编辑框(edit)

控件样式

创建控件

初始控件

消息处理

示例代码


编辑框(edit)

控件样式

  • 编辑框(Edit Control)是Windows中最常用的控件之一,用于接收用户输入的文本信息。编辑框可以设置为单行或多行,支持多种文本格式和输入限制。
  • 风格样式
    • WS_CHILD:子窗口样式。
    • WS_VISIBLE:控件创建时可见。
    • WS_BORDER:控件周围有边框。
    • WS_TABSTOP:用户可以使用Tab键切换到此控件。
  • 控件样式
    • ES_AUTOHSCROLL:当用户输入超过控件宽度时,文本自动向左滚动。
    • ES_MULTILINE:多行编辑框。
    • ES_WANTRETURN:在多行编辑框中,用户按下Enter键时插入一个换行符,而不是发送 WM_COMMAND 消息。
创建控件
  • 使用 CreateWindowCreateWindowEx 函数创建编辑框控件。需要指定控件类名为 "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); 	}  }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!