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

目录

编辑框(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);
	}

}

相关推荐

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

    2024-07-12 21:32:03       21 阅读
  2. Windows图形界面(GUI)-SDK-C/C++ - 列表(List)

    2024-07-12 21:32:03       24 阅读
  3. Windows图形界面(GUI)-SDK-C/C++ - 组合(ComboBox)

    2024-07-12 21:32:03       20 阅读
  4. Windows图形界面(GUI)-SDK-C/C++ - 应用程序结构

    2024-07-12 21:32:03       29 阅读
  5. Windows图形界面(GUI)-SDK-C/C++ - 按钮(button)

    2024-07-12 21:32:03       22 阅读
  6. GUI图形界面编程

    2024-07-12 21:32:03       27 阅读
  7. Windows图形界面(GUI)-SDK-C/C++ - 窗口类注册和管理

    2024-07-12 21:32:03       18 阅读
  8. Windows图形界面(GUI)-DLG-C/C++ - 树形视图(TreeView)

    2024-07-12 21:32:03       22 阅读
  9. Windows图形界面(GUI)-DLG-C/C++ - 状态栏(StatusBar)

    2024-07-12 21:32:03       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 21:32:03       51 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 21:32:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 21:32:03       44 阅读
  4. Python语言-面向对象

    2024-07-12 21:32:03       55 阅读

热门阅读

  1. 小红书后端

    2024-07-12 21:32:03       15 阅读
  2. 聊聊未来的测试工程师是什么样子?

    2024-07-12 21:32:03       20 阅读
  3. 如何理解Node.js?NPM?Yarn?Vue?React?

    2024-07-12 21:32:03       17 阅读
  4. react多级组件间如何传递props

    2024-07-12 21:32:03       18 阅读
  5. self_attention python代码

    2024-07-12 21:32:03       17 阅读