Win32 笔记搬运_编辑控件(Edit)

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

在这里插入图片描述

  1. 创建Editr控件
    编辑控件分为单行和多行两种样式

创建单行控件

// 创建单行编辑控件

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		显示垂直滚动条
  1. 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		接收回车键,只有多行编辑才有效 
  1. 控件消息
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 
  1. 控件通知消息
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: 控件句柄
5. 实例
修改控件背景色

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,滚动的时候就没有重影

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+V代码搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值