win32学习-控件-编辑栏(2021.1.16)

第一次写博客,见谅

注意:

  • 真的从0开始,只有一点C/C++基础
  • 之前的学习记录都在电脑里,之后有空慢慢传上来
  • 学的是win32,用的是vs2013,看的视频里老师用的是vs2010
  • 写这个的主要目的是怕自己之后忘了,方便捡起来

--学习内容:控件之编辑栏:windows标准控件,可以由客户向其中输入文本。窗口类名是edit。

1)控件样式:ES edit style(部分):
ES_MULTILINE//多行
ES_AUTOVSCROLL//超出范围之后自动向下滚动(必须在多行的基础上)配合WS_VSCROLL,输入框会有滚动条
ES_PASSWORD//输入的东西都显示为*,不能和ES_MULTILINE一起
ES_LOWERCASE/UPPERCASE//全部改成小写字母/大写字母
ES_WANTRETURN//视回车为换行,若不设置则会直接执行默认命令(如果没有别的命令就不用设这个格式也会把回车当换行)

windows控件库(样式、用法都可以在里面查找)
https://docs.microsoft.com/zh-cn/windows/win32/controls/window-controls

2)向编辑框控件发送消息EM_XXX(edit message)
示例:自动选中部分文字
需要配合ES_NOHIDESEL样式,SendMessage(hedit, EM_SETSEL, 1, 3);//第一个字符是0,依次增加。

3)控件向父窗口发送WM_COMMAND消息
消息参数:
wParam:低字节是控件id,高字节是通知码;lParam:edit控件的句柄

通知码为EN_XXX(edit notifications):
EN_CHANGE//用户正在编辑

4)GetWindowText函数获取窗口标题栏文本(控件的文本内容)其实就是向控件发送了一个WM_GETTEXT消息
int WINAPI GetWindowTextW( HWND hWnd,//控件句柄
(nMaxCount) LPWSTR lpString,//接收文本的地址
 int nMaxCount);//字符串总长(包括\0)

case WM_COMMAND:
	{
		WORD id = LOWORD(wParam);
		WORD code = HIWORD(wParam);
		HWND hedit = (HWND)lParam;
		if (id == 1 && code == EN_CHANGE)
		{
			TCHAR buffer[64] = { 0 };
			GetWindowText(hedit, buffer, sizeof(buffer));
			MessageBox(NULL, buffer, L"编辑栏内容", MB_OK);
		}
	}break;

5)我想把这玩意染成绿色的:父窗口过程处理WM_CTLCOLOREDIT(WM_CTLCOLORSTATIC静态控件
消息参数还是wParam为hdc,lParam为控件句柄
返回值一样是一个画刷(用于背景)

Guess you like

Origin blog.csdn.net/Enoshima/article/details/112722346