前言
Windows程序设计17:Win32窗口高级列表控件的使用主动操作流程2。
一、实现功能讲解
上一次博客包含了Win32窗口高级列表控件的使用主动操作流程的一些使用方法。分别介绍了按钮和Report消息列表的创建以及使用。这次将按钮和Report消息列表联合起来,按下按钮后来进行一些操作。
1.实现点击按钮插入一行
实现点击按钮2后在列表上方插入一行
运行后得到如下结果
点击按钮2后插入行
2.点击按钮把界面编辑框的文本插入到列表中
首先创建一个编辑框,要注意在利用CreateWindow创建编辑框前要先定义编辑框ID和保存返回的窗口句柄
hEditWnd1 = CreateWindow(WC_EDIT, _T("实现的编辑框"), WS_CHILD | WS_VISIBLE | WS_BORDER, 600, 250, 100, 100, hWnd, (HMENU)IDC_LIST_1, NULL, NULL); //创建 子控件
这里实现点击按钮1将编辑框内的内容加入到列表中,利用函数GetWindowText获取编辑框内的内容。函数原型如下
int GetWindowText(
HWND hWnd, // 目标窗口的句柄
LPTSTR lpString, // 接收文本的缓冲区
int nMaxCount // 缓冲区的最大字符容量(包括终止符 '\0')
);
参数说明:
HWND hWnd为要获取文本的窗口句柄(如按钮、编辑框、窗口本身)。
LPTSTR lpString为指向接收文本的缓冲区,需提前分配足够内存。
int nMaxCount为缓冲区能存储的最大字符数(含 \0)。若文本长度超过此值,会被截断。
返回值:成功时返回 实际复制的字符数(不包括 \0)。失败时返回 0,可通过 GetLastError() 获取错误码。
运行后如图
点击按钮1后插入编辑框内的信息
由于之前只插入了第一行,因此目前只能在第一行的每个列更改列表信息。其他行没有插入(初始化),无法直接利用函数ListView_SetItemText直接更改其他行的列表信息,需要先插入其他行再进行。
3.获取列表有多少行并在最后一行后面插入行
利用函数ListView_GetItemCount获取列表有多少行,函数原型为
int ListView_GetItemCount(HWND hwnd);
参数HWND hwnd: ListView 为控件的句柄。
返回值:返回 ListView 控件中的项目数量。如果出错,返回值为 0。
利用函数SNDMSG在指定位置插入行,函数原型为(实际上为SendMessage函数的别名)
LRESULT SNDMSG(HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam);
参数HWND hWnd: 目标窗口或控件的句柄。
参数UINT Msg: 要发送的消息(例如 WM_COMMAND、LB_GETCOUNT 等)。
参数WPARAM wParam: 消息的附加参数,具体含义取决于消息类型。
参数LPARAM lParam: 消息的附加参数,具体含义取决于消息类型。
返回值取决于发送的消息类型。通常,返回值是消息处理的结果。
运行得到如下结果
点击按钮1后成功实现
4.删除指定行
利用ListView_DeleteItem进行行的删除,函数原型为
BOOL ListView_DeleteItem(HWND hwnd,
int iItem);
参数HWND hwnd: ListView控件的句柄。
参数int iItem: 要删除的项的索引(从 0 开始)。
返回值:如果成功删除项,返回 非零值。如果失败,返回 0。
将按钮2的功能改为点击删除指定行
可以进行删除
删除后为
5.选择整行
目前的程序不能选择整行,第二列没有被选上
可以利用函数ListView_SetExtendedListViewStyle来实现整行选择,函数原型为
DWORD ListView_SetExtendedListViewStyle(HWND hwnd, DWORD dwExStyle);
参数HWND hwnd: ListView 控件的句柄。
参数DWORD dwExStyle: 要设置的扩展样式(可以是单个样式或样式的组合)。
返回值:返回 ListView 控件之前的扩展样式。
此时可以整行选择
二、整体代码
该项目的整体代码分享如下
#include<windows.h>
#include<tchar.h>
# include<commctrl.h>
static TCHAR szWindowClass[] = _T("WindowClass");
static TCHAR szTitle[] = _T("窗口程序示例");
PAINTSTRUCT ps;
HDC hdc;
TCHAR greeting[] = _T("各位晚上好");
INT IDC_BUTTON_1 = 200