自学内容网 自学内容网

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_SINGLELINE1
#define ID_EDIT_MULTILINE2
#define ID_EDIT_PASSWORD3
#define ID_EDIT_READONLY4


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);
}

}


原文地址:https://blog.csdn.net/2301_80612536/article/details/140354201

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!