Win32 学习笔记_编辑控件(Edit)

编辑控件分为单行和多行两种样式

编辑控件的创建

创建单行控件

// 创建单行编辑控件
	HWND hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), TEXT("edit1"),
		WS_VISIBLE | WS_CHILD | ES_LEFT,
		10, 10, 200, 30, hWnd, (HMENU)10001, hInstance, 0);

	HWND hEdit2 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), TEXT("edit2"),
		WS_VISIBLE | WS_CHILD | ES_LEFT,
		10, 50, 200, 30, hWnd, (HMENU)10002, hInstance, 0);

要响应Tab顺序就要加上WS_TABSTOP样式

创建多行编辑控件

// 创建多行编辑控件
	HWND hEdit3 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), TEXT("edit3"),
		WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_VSCROLL | ES_WANTRETURN,
		10, 90, 200, 200, hWnd, (HMENU)10003, hInstance, 0);

多行风格样式有:
ES_MULITLINE		多行编辑样式
ES_WANTRETURN		接收回车键
WS_VSCROLL			显示垂直滚动条

效果图

在这里插入图片描述

Edit控件样式

ES_AUTOHSCROLL		自动在行末向右滚动10个字符
ES_AUTOVSCROLL		自动向上滚动一行
ES_CENTER			将文本居中显示(单行/多行)
ES_LEFT				文本居左显示
ES_LOWERCASE		将字符转为小写
ES_MULTILINE		多行编辑
ES_NOHIDESEL		控件失去焦点时,也选中所选文本
ES_NUMBER			只允许输入数字
ES_OEMCONVERT		转换编辑控件中输入的文本字符集
ES_PASSWORD		显示密码样式(*****),只用于单行编辑控件
ES_READONLY			编辑控件为只读样式
ES_RIGHT			文本靠右显示
ES_UPPERCASE		将所有字符转为大写字符
ES_WANTRETURN		接收回车键,只有多行编辑才有效

Edit 控件消息

EM_GETSEL 获得选中文本的起始位置和结束位置(WPARAM=起始位置,LPARAM=结束位置)
EM_SETSEL 设置文本选中的起始位置和结束位置(WPARAM=起始位置,LPARAM=结束位置)
EM_GETCHARFROMPOS 返回光标所在位置的行的索引和字符从0开始的索引(WPARAM=0,LPARAM=L(pt.x),H(pt.y);返回值:(DWORD),L(行的索引),H(字符索引)
EM_LINEFORMCHAR 返回指定字符所在行的索引,WPARM=指定字符索引/-1(当前光标所在行),LPARAM=0;
EM_GEETLINEINDEX 返回指定字符索引所在行第一个字符的索引(即指定字符串的索引-第一个字符索引=指定字符在行中的第几个字符列),WPARAM=指定字符的索引/-1(当前光标所在位置),LPARAM=0;
EM_GETMODIFY 获得编辑控件是否修改的标记,WPARAM=0,LPARAM=0, 返回BOOL
EM_SETMODIFY 设置控件的修改标记,WPARAM=BOOL,LPARAM=0; 无返回
EM_GETLINELENGTH 返回指定字符索引的行中字符串的长度(-1为当前光标所在行),WPARAM=字符索引/(-1当前光标);返回行中字符串的长度
EM_GETLINE 获得指定行的字符串,WPARAM=指定行的索引/(-1),LPARAM=接收字符串的缓存指针(指针第一个字符要=缓存大小),返回实际字符串长度
EM_REPLACESEL 替换选中文本为指定的字符串, WPARAM=BOOL(是否可撤销),LPARAM=要替换的字符串,返回无
EM_GETLINECOUNT 获得控件中行的总数, WPARAM=0,LPARAM=0;返回行的总数(int);
EM_SETREADONLY 设置控件为只读模式.WPARAM=BOOL(真为只读,假为可编辑);LPARAM=0; 返回无
EM_GETMARGINS 获得文本编辑左右边距WPARAM=0,LPARAM=0; 返回: (DWORD)L=左边距,H=右边距
EM_SETMARGINS 设置文本左右边距WPARAM=EC_LEFTMARGIN|EC_RIGHTMARGIN,LPARAM=(L左边距,H右边距),返回无
EM_COPY 复制WM_COPY
EM_CUT 剪贴WM_CUT
EM_PASTE 粘贴WM_PASTE

Edit 控件通知消息

EN_CHENGE // 文本内容改变消息
EN_HSCROLL // 水平滚动条消息
EN_KILLFOCUS // 失去焦点消息
EN_MAXTEXT // 超出最大文本长度消息
EN_SETFOCUS // 获得焦点消息
EN_UPDATE // 控件重绘自身前发送的消息,文本设置成功后在显示前发送
EN_VSCROLL // 垂直滚动条消息
WM_CTLCOLOREDIT // 重绘控件背景色和文本颜色

备注:

Edit通知消息是通过发送WM_COMMAND消息到父窗口中的,
所以要在父窗口的WM_COMMAND消息中捕获控件通知消息
WPARAM: LOWORD(控件id), HIWORD(通知消息)
LPARAM: 控件句柄

实例:

1. 修改控件背景色
LRESULT OnCtlColorEdit(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	HDC hdc = (HDC)wParam;
	if ((HWND)lParam == GetDlgItem(hWnd, 10001))
	{
		SetTextColor(hdc, RGB(0, 120, 215));
		SetBkMode(hdc, TRANSPARENT);//OPAQUE,TRANSPARENT
		SetBkColor(hdc, RGB(241, 239, 228));
		g_hBkBrush1= CreateSolidBrush(RGB(241, 239, 228));
		return (LRESULT)g_hBkBrush1; // 返回的画刷要是成员变量或是全局变量,方便后面删除
	}

	if ((HWND)lParam == GetDlgItem(hWnd, 10003))
	{
		SetTextColor(hdc, RGB(0, 0, 255));
		SetBkMode(hdc, OPAQUE);
		SetBkColor(hdc, RGB(241, 239, 228));
		g_hBkBrush3 = CreateSolidBrush(RGB(241, 239, 228));
		return (LRESULT)g_hBkBrush3;
	}

	return 0;
}

多行编辑控件的文本背景模式为TRANSPARENT就是下面这样式,滚动的时候背景没擦除

在这里插入图片描述

多行编辑控件文本背景模式为OPAQUE,滚动的时候就没有重影

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值