Win32 SDK(四)Edit控件用法
Win32 SDK(四)Edit控件用法
1获得控件句柄
HWND hEdit2 = ::GetDlgItem(hWnd, IDC_EDIT2);
WINUSERAPI
HWND
WINAPI
GetDlgItem(
_In_opt_ HWND hDlg, //父窗口句柄
_In_ int nIDDlgItem); //控件ID
2赋值
SetDlgItemText(hWnd, IDC_EDIT1, TEXT("给Edit控件赋值方法一"));
HWND hEdit2 = ::GetDlgItem(hWnd, IDC_EDIT2);
SendMessage(hEdit2, WM_SETTEXT, 0, (LPARAM)TEXT("给Edit控件赋值方法二"));
3获得控件中的字符串长度
方法1:
int nLen = SendMessage(hEdit2, WM_GETTEXTLENGTH, 0, 0);
方法2:
int nLen2=GetWindowTextLength(hEdit2);
4获得控件中的字符串
TCHAR tchar[128],tchar2[128];
GetDlgItemText(hWnd, IDC_EDIT1, tchar, 128); //方法1
SendMessage(hEdit2, WM_GETTEXT, 128, (LPARAM)tchar2); //方法2
5全选中消息,EM_SETSEL
SendMessage(hEdit1, EM_SETSEL, 0, -1); //全选中

SendMessage(hEdit2, EM_SETSEL, 1, 6); //1为起始位置,6为结束位置的选中

6获得焦点
SendMessage(hEdit2, WM_SETFOCUS, 0, 0);//获得焦点
7修改控件颜色
//在消息中捕获WM_CTLCOLOREDIT消息
case WM_CTLCOLOREDIT:
{
//OnCtlColorEdit(wParam, lParam);
HDC hdc = (HDC)wParam;
if (hEdit2 == (HWND)lParam || hEdit1 == (HWND)lParam)
{
SetTextColor(hdc, RGB(224, 255, 255)); //设置字体颜色
SetBkMode(hdc, OPAQUE); //设置背景色模式
SetBkColor(hdc, RGB(0, 0, 255)); //设置背景颜色
return (INT_PTR)CreateSolidBrush(RGB(0, 0, 255)); //返回一个背景颜色刷子
}
break;
}

8捕获EN_CHANGE消息,控件输入变化消息,是在WM_COMMAND命令消息中捕获
case WM_COMMAND:
{
if (LOWORD(wParam) == IDC_EDIT4 && HIWORD(wParam)==EN_CHANGE)
{
return On_EnChange(wParam, lParam);
}
}
break;
9其他消息
EN_CHANGE:编辑框的内容被用户改变了,与WN_UPDATE不同,这是在编辑框正文被刷新后才发出的消息
EN_ERRSPACE: 编辑框无法申请足够的动态内存来满足需要
EN_HCCROLL: 用户在水平滚动条上单击鼠标
EN_KILLFOCUS; 编辑框获失去焦点
EN_MAXTEX; 超出了规定的最大字符就会发出消息
EN_SETFOCUS; 获得焦点
EN_UPDATE; 在编辑框准备显示改变了正文时发送该消息
EN_VSCROLL; 用户在垂直滚动条上单击鼠标
10.只读消息
EM_SETREADONLY; 只读消息,用法: SendMessage(hEdit1, EM_SETREADONLY, 1, 0);
11.屏蔽系统右键菜单(重写回调函数)
LONG_PTR oldProc;//保存旧的回调函数地址
//在初始消息中重新设置Edit控件的回调函数
BOOL MyWinDialog::OnInitDialog(WPARAM wParam, LPARAM lParam)
{
AfxCWin::OnInitDialog(wParam, lParam);
//TODO:初始化代码
HWND hEditWnd = ::GetDlgItem(m_hWnd, IDC_EDIT2);
//重新设置Edit控件的回调函数
- oldProc = SetWindowLongPtr(hEditWnd, GWLP_WNDPROC, (LONG_PTR)EditProc);
}
//新的回调函数
LONG_PTR CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_RBUTTONDOWN:
{
//添加自己的右键菜单,如果不添加直接返回1就能屏蔽掉系统菜单了
HMENU hSub = GetSubMenu(pMyDlg->EditMenu, 0);
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(hSub, TPM_LEFTBUTTON | TPM_TOPALIGN | TPM_RIGHTBUTTON,pt.x, pt.y, 0,pMyDlg->GetHwnd(), NULL);
}
return 1;
default:
break;
}
//返回旧的回调函数
return CallWindowProc((WNDPROC)oldProc, hWnd, uMsg, wParam, lParam);
}
12.动态创建控件
//Edit控件的创建
HWND hEdit1 = 0;
HWND hEdit2 = 0;
//创建单行控件
hEdit1 = ::CreateWindowW(TEXT("Edit"), TEXT("Edit Control1"),
WS_CHILD|WS_VISIBLE|ES_LEFT,
200, 20, 100, 20, hWnd, (HMENU)10001, g_hInstance, NULL);//单行文本
//创建多行控件
hEdit2 = ::CreateWindow(TEXT("Edit"), TEXT("Edit Control2\r\n多行文本控件"), WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | ES_AUTOVSCROLL,
250, 50, 150, 80, hWnd, (HMENU)10002, g_hInstance, NULL);
Win32 SDK(四)Edit控件用法的更多相关文章
- win32: 文本编辑框(Edit)控件响应事件
过去几年,关于文本编辑框(Edit)控件的响应事件,我都是在主程序 while(GetMessage(&messages, NULL, 0, 0)) { ... } 捕获. 总感觉这种方式让人 ...
- win32 sdk列表视图控件(ListCtrl或ListView)资料整理
列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来.与树视图类似,列表控件可以由多个子项目组成,可以设置为Icon ...
- win32 sdk绘制ListBox控件
1>产生: // HWND CreateLB(HWND parentWnd) { HWND hListBox=0; hListBox = CreateWindow("LISTBOX&q ...
- win32 sdk 列表视图控件绘制
////////////////////////////////////////////////////////////// LRESULT ListViewCustomDraw(HWND hwnd, ...
- 增加duilib edit控件的提示功能和多种文字颜色
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ...
- win32 修改Edit控件文本颜色与背景色
#define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 //编辑控件Edit #define WM_CTLCOLORLISTBO ...
- C++ 一个程序获取另一个程序Edit控件的内容
//一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ...
- vc 在edit控件中动态插入数据滚动显示
内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ...
- MFC学习之EDIT控件初始化
//四种方法为EDIT控件初始化 //调用系统API HWND hEidt = ::GetDlgItem(m_hWnd,IDC_EDIT1); ::SetWindowText( ...
- 关于Datagridview控件用法的一些总结(设置列chicun)
1. 关于Datagridview控件用法的一些总结:http://www.cnblogs.com/mingjiatang/p/4968049.html
随机推荐
- DotNetGuide荣登GitHub C#中文 Trending 月榜第一
前言 发现最近有一大批应届生同学和Java转.NET的同学加入了我们的DotNetGuide技术社区交流6群(其他5个群都已满500人,6群也已有340多个小伙伴了)今天看到DotNetGuide荣登 ...
- Android ADB命令集锦
Android ADB命令集锦 原文(有删改):https://blog.csdn.net/dianziagen/article/details/57400723 本文包括: adb基本指令 Shel ...
- SPI 协议学习
SPI 协议学习 背景 2年之前学过SPI,但是因为现在太久没用.基础知识不牢靠(对自己的面试表现不满意):所以重新整理了一遍. SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据 ...
- B 站和小红书又又又崩了,罪魁祸首竟然又是他。。。
大家好,我是凌晨. 今天上午10点左右,我打开B站发现无法刷新视频列表和评论区,收藏夹和弹幕也均不可用. 原以为是手机网络问题,换网络重启手机都还是不行,第一时间打开微博,果然,B站崩了的新闻荣登榜首 ...
- 继续我们的复习之路——webapi
前面断更几天是因为在住安心复习DOM BOM的内容 不得不说 还得是DOM 在这一章节的复习内容中 涌现出了很多又代表意义 经典的一些小案例 而且 还是有些难度的 有一两个我反正是自己独立完成不了 ...
- 韦东山freeRTOS系列教程之【第五章】队列(queue)
目录 系列教程总目录 概述 5.1 队列的特性 5.1.1 常规操作 5.1.2 传输数据的两种方法 5.1.3 队列的阻塞访问 5.2 队列函数 5.2.1 创建 5.2.2 复位 5.2.3 删除 ...
- C# 判断字符串是否为整数
/// <summary> /// 判断一个字符串是否是正整数 /// </summary> /// <param name="s"></ ...
- 将传统应用带入浏览器的开源先锋「GitHub 热点速览」
现代浏览器已经不再是简单的浏览网页的工具,其潜能正在通过技术不断地被挖掘和扩展.得益于 WebAssembly 等技术的出现,让浏览器能够以接近原生的速度执行非 JavaScript 语言编写的程序, ...
- SQL Server 验证某栏位是否存在某字符串(CHARINDEX)
SELECT * FROM LiuJun_PKqitchqi WHERE CHARINDEX('230527Z3258',qr_code) > 0
- 题解:AT_abc360_c [ABC360C] Move It
背景 机房大佬掉大分了,乐悲. 题意 给你几个箱子和每个箱子里装有的东西 \(a\) 和对应的重量 \(w\),现在要让每个箱子里都装有一个东西,每次可以移动任意一个箱子中的任意一个东西,代价为它的重 ...