当前位置: 首页 > news >正文

Win32 ListBox控件

Win32 ListBox控件

创建ListBox控件

  1. 创建窗口函数

    HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int y, // 左上角垂直坐标int nWidth,int nHeight,HWND hWndParent, // 窗口的父窗口句柄 --> 如果是子窗口要写这个参数HMENU hMenu,     // 窗口菜单句柄HINSTANCE hInstance, // 应用程序实例句柄 --> WinMain 第一个参数LPVOID lpParam // 窗口创建时附加参数 --> 一般给NULL
    ); // 创建成功返回窗口句柄
    
  2. 创建ListBox

    #define ID_LIST        1001   // 窗口句柄HWND hListBox = CreateWindowEx(0, TEXT("ListBox"), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_HASSTRINGS,10, 10, 200, 200, hWnd, (HMENU)ID_LIST, ((LPCREATESTRUCT)lParam)->hInstance, 0);const TCHAR *strArray[] = { TEXT("星期一"), TEXT("星期二"), TEXT("星期三"), TEXT("星期四"), TEXT("星期五"), TEXT("星期六"), TEXT("星期日")};
    for (int i = 0; i < 7; i++){// 添加内容SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)strArray[i]);
    }
    
  3. 效果
    在这里插入图片描述

控件样式

样式说明
LBS_COMBOBOX通知列表框它是组合框的一部分。 这允许两个控件之间的协调,以便它们呈现统一的 UI。 组合框本身必须设置此样式。
LBS_DISABLENOSCROLL当列表框不包含足够的项目滚动时,显示禁用的水平或垂直滚动条。 如果未指定此样式,则当列表框不包含足够的项目时,滚动条将隐藏。 此样式必须与 WS_VSCROLL 或 WS_HSCROLL 样式一起使用。
LBS_EXTENDEDSEL允许使用 SHIFT 键和鼠标或特殊键组合选择多个项。
LBS_HASSTRINGS指定列表框包含由字符串组成的项。 列表框维护字符串的内存和地址,以便应用程序可以使用 LB_GETTEXT 消息检索特定项的文本。 默认情况下,除所有者绘制的列表框之外的所有列表框都具有此样式。 可以创建具有或不带此样式的所有者绘制列表框。对于没有此样式的所有者绘制列表框, LB_GETTEXT 消息检索与项关联的值, (项数据) 。
LBS_MULTICOLUMN指定水平滚动的多列列表框。 列表框自动计算列的宽度,或者应用程序可以使用 LB_SETCOLUMNWIDTH 消息设置宽度。 如果列表框具有 LBS_OWNERDRAWFIXED 样式,则当列表框发送 WM_MEASUREITEM 消息时,应用程序可以设置宽度。具有 LBS_MULTICOLUMN 样式的列表框不能垂直滚动,它忽略它接收的任何 WM_VSCROLL 消息。不能组合 LBS_MULTICOLUMN 和 LBS_OWNERDRAWVARIABLE 样式。 如果同时指定了两者, 则忽略LBS_OWNERDRAWVARIABLE 。
LBS_MULTIPLESEL每次用户单击或双击列表框中的字符串时,都会打开或关闭字符串选择。 用户可以选择任意数量的字符串。
LBS_NODATA指定无数据列表框。 当列表框中的项数超出一千时,请指定此样式。 无数据列表框还必须具有 LBS_OWNERDRAWFIXED 样式,但不得具有 LBS_SORT 或 LBS_HASSTRINGS 样式。无数据列表框类似于所有者描述的列表框,但它不包含项的字符串或位图数据。 用于添加、插入或删除项的命令始终忽略任何指定的项数据;在列表框中查找字符串的请求始终失败。 系统在必须绘制项时将 WM_DRAWITEM 消息发送到所有者窗口。 使用WM_DRAWITEM消息传递的 DRAWITEMSTRUCT 结构的 itemID 成员指定要绘制的项的行号。 无数据列表框不发送 WM_DELETEITEM 消息。
LBS_NOINTEGRALHEIGHT指定列表框的大小正好是应用程序在创建列表框时指定的大小。 通常,系统调整列表框的大小,以便列表框不显示部分项。对于 具有LBS_OWNERDRAWVARIABLE 样式的列表框,始终强制实施 LBS_NOINTEGRALHEIGHT 样式。
LBS_OWNERDRAWFIXED指定列表框的所有者负责绘制其内容,并且列表框中的项目高度相同。 创建列表框时,所有者窗口会收到 WM_MEASUREITEM 消息,当列表框的可视方面发生更改时收到 WM_DRAWITEM 消息。
LBS_SORT按字母顺序对列表框中的字符串进行排序。
LBS_STANDARD按字母顺序对列表框中的字符串进行排序。 每当用户单击列表框项、双击项目或取消所选内容时,父窗口都会收到通知代码。 列表框具有垂直滚动条,其边框位于右侧。 此样式结合了 LBS_NOTIFY、 LBS_SORT、 WS_VSCROLL和 WS_BORDER 样式。
LBS_USETABSTOPS允许列表框在绘制其字符串时识别和展开制表符。 可以使用 LB_SETTABSTOPS 消息指定制表位位置。 默认选项卡位置相隔 32 个对话框模板单位。 对话框模板单元是对话框模板中使用的与设备无关的单位。 若要将度量值从对话框模板单位转换为屏幕单位 (像素) ,请使用 MapDialogRect 函数。
LBS_WANTKEYBOARDINPUT指定每当用户按下键且列表框具有输入焦点时,列表框的所有者将接收 WM_VKEYTOITEM 消息。 这使应用程序能够在键盘输入上执行特殊处理。

控件消息

消息码说明WPARAMLPARAM返回值
LB_ADDSTRING添加字符串到列表项中0LPCTSTRInt
LB_DELETESTRING删除指定字符串项nIndex0Int
LB_GETCOUNT获得列表项的部数00Int
LB_GETCURSEL获得当前选中项的索引00Int
LB_GETITEMDATA获得指定项的附加数据nIndex0DWORD_PTR
LB_GETSEL获得指定项的选中状态nIndex0Int
LB_GETSELCOUNT获得多选项的总数00Int
LB_GETSELITEMS获得选中项的索引数组nMaxArray(数组大小)lpArray(数组)Int
LB_GETTEXT获得指定项的字符串nIndexLPTSTRInt
LB_GETTEXTLEN获得指定项字符串长度nIndex0Int
LB_GETTOPINDEX获得第一个可见项的索引00Int
LB_INSERTSTRING插入字符串项nIndexLPCTSTRInt
LB_RESETCONTENT删除所有的项00Void
LB_SELITEMRANGE范围选择项或取消范围选择BOOL(选择=TRUE,取消=FALSE)DWORD (L=开始选择项的索引,H=结束项的索引)Int
LB_SETCARETINDEX设置指定项获得焦点,并可见nIndexBOOL(FALSE为完全可见,TRUE为部分可见)Int
LB_SETCURSEL设置当前选中的字符串项nIndex0Int
LB_SETITEMDATA设置指定项的附加数据nIndexDWORD_PTRInt
LB_SETSEL设置指定项的选中状态,并获得焦点和可见BOOL 为真突出显示,为FALSE取消突出显示nIndexInt
LB_SETTOPINDEX设置指定项为可见项nIndex0Int

Demo

1. 单击选项弹出消息框显示选择的项
if (LOWORD (wParam) == ID_LIST && HIWORD(wParam) == LBN_SELCHANGE) {int iIndex = SendMessage(hListBox, LB_GETCURSEL, 0, 0);int iLength = SendMessage(hListBox, LB_GETTEXTLEN, iIndex, 0) + 1;TCHAR * pVarName = (TCHAR*)malloc(iLength*sizeof(TCHAR));SendMessage(hListBox, LB_GETTEXT, iIndex, (LPARAM)pVarName);MessageBox(hWnd, pVarName, TEXT("选择的内容"), MB_OK);free(pVarName);
}
2. ListBox重绘

ListBox重绘,实现QQ 消息列表效果

通过指定LBS_OWNERDRAWFIXED样式,可以进行ListBox的重绘。

两个重要消息:WM_DRAWITEMWM_MEASUREITEM

2.1 WM_DRAWITEM 消息

第二个附加参数lParam里包含了控件的相关信息, 其实际类型是DRAWITEMSTRUCT的指针类型

DRAWITEMSTRUCT 原型:

typedef struct tagDRAWITEMSTRUCT {UINT      CtlType;UINT      CtlID;UINT      itemID;UINT      itemAction;UINT      itemState;HWND      hwndItem;HDC       hDC;RECT      rcItem;ULONG_PTR itemData;
} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;
  • CtlType 指定了控件的类型
    在这里插入图片描述

  • CtlID

    组合框、列表框、按钮或静态控件的标识符。 此成员不用于菜单项。

  • itemID

    菜单项的菜单项标识符或列表框或组合框中项的索引。 对于空列表框或组合框,此成员可以是 -1

    这允许应用程序仅在 rcItem 成员指定的坐标处绘制焦点矩形,即使控件中没有项也是如此。 这向用户指示列表框或组合框是否具有焦点。

    itemAction 成员中设置位的方式决定了矩形是否与列表框或组合框具有焦点一样绘制

  • itemAction

    所需的绘图操作。 此成员可以是一个或多个值。
    在这里插入图片描述

  • itemState

    当前绘图操作发生后项的视觉状态。 此成员可以是下表中显示的值的组合。
    在这里插入图片描述

  • hwndItem

    组合框、列表框、按钮和静态控件的控件的句柄。 对于菜单,此成员是包含该项的菜单的句柄。

  • hDC

    设备上下文的句柄;在控件上执行绘图操作时,必须使用此设备上下文。

  • rcItem

    一个矩形,用于定义要绘制的控件的边界。 此矩形位于 hDC 成员指定的设备上下文中。 系统会自动剪辑所有者窗口在组合框、列表框和按钮的设备上下文中绘制的任何内容,但不会剪辑菜单项。 绘制菜单项时,所有者窗口不得在 rcItem 成员定义的矩形边界之外绘制。

  • itemData

    与菜单项关联的应用程序定义值。 对于控件,此参数指定LB_SETITEMDATA或CB_SETITEMDATA消息最后分配给列表框或组合框的值。 如果列表框或组合框具有 LBS_HASSTRINGS或 CBS_HASSTRINGS样式,则此值最初为零。 否则,此值最初是传递给下列消息之一的 lParam 参数中的列表框或组合框的值:

    • CB_ADDSTRING
    • CB_INSERTSTRING
    • LB_ADDSTRING
    • LB_INSERTSTRING

    如果 CtlTypeODT_BUTTONODT_STATIC, 则itemData 为零。

2.2 WM_MEASUREITEM消息

第二个附加参数lParam描述了相关项的绘制信息,其实际类型是MEASUREITEMSTRUCT的指针类型

typedef struct tagMEASUREITEMSTRUCT {UINT      CtlType;UINT      CtlID;UINT      itemID;UINT      itemWidth;UINT      itemHeight;ULONG_PTR itemData;
} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;

大部分字段同DRAWITEMSTRUCT, 两个重要字段itemWidth, itemHeight 指定列表项的宽度和高度

在这里插入图片描述

2.3 重要代码
void SetListBoxItemRect(LPARAM lParam) {PMEASUREITEMSTRUCT pmr = (PMEASUREITEMSTRUCT)lParam;if (pmr->CtlID == ID_LIST) {pmr->itemHeight = 58;}
}void DrawListBoxItem(LPARAM lParam) {TCHAR* pVarName;PDRAWITEMSTRUCT pdr = (PDRAWITEMSTRUCT)(lParam);COLORREF nColor = RGB(66, 66, 66);HBRUSH hBursh = NULL;   if(pdr->itemState & ODS_SELECTED ) // 选中状态hBursh = CreateSolidBrush(RGB(255, 128, 0));elsehBursh = CreateSolidBrush(RGB(255, 255, 255));FillRect(pdr->hDC, &pdr->rcItem, hBursh);DeleteObject(hBursh);int itemLength = SendMessage(hListBox, LB_GETTEXTLEN, pdr->itemID, 0) + 1;pVarName = (TCHAR*)malloc(itemLength * sizeof(TCHAR));SendMessage(hListBox, LB_GETTEXT, pdr->itemID, (LPARAM)pVarName);if (pVarName == NULL) return;HBITMAP hBmp = LoadBitmap(hInst, (char*)info_arr[atoi(pVarName)].bitmapId);HDC Bhdc = CreateCompatibleDC(pdr->hDC);HGDIOBJ oldBMP = SelectObject(Bhdc, hBmp);StretchBlt(pdr->hDC, pdr->rcItem.left + 1, pdr->rcItem.top + 1, 56, 56, Bhdc, 0, 0, 100, 100, SRCCOPY);HFONT font1 = CreateFont(20,0,0,0,900,NULL,NULL,NULL,GB2312_CHARSET,NULL,NULL,NULL,NULL,"仿宋");HFONT font2 = CreateFont(20,0,0,0,800,NULL,NULL,NULL,GB2312_CHARSET,NULL,NULL,NULL,NULL,"方正舒体");SetBkMode(pdr->hDC, TRANSPARENT);HGDIOBJ oldfont = SelectObject(pdr->hDC, font1);nColor = RGB(0, 0, 0);SetTextColor(pdr->hDC, nColor);TextOut(pdr->hDC, pdr->rcItem.left + 65, pdr->rcItem.top + 5, info_arr[atoi(pVarName)].userName, strlen(info_arr[atoi(pVarName)].userName));SelectObject(pdr->hDC, font2);nColor = RGB(133, 193, 246);SetTextColor(pdr->hDC, nColor);TextOut(pdr->hDC, pdr->rcItem.left + 65, pdr->rcItem.top + 30, info_arr[atoi(pVarName)].newData, strlen(info_arr[atoi(pVarName)].newData));SelectObject(pdr->hDC, oldfont);SelectObject(Bhdc, oldBMP);DeleteObject(hBmp);DeleteObject(font1);DeleteObject(font2);DeleteDC(Bhdc);free(pVarName);
}
2.4 实现效果

在这里插入图片描述

参考

  1. 基本使用:https://blog.csdn.net/qq_31178679/article/details/125904122

  2. ListBox风格、消息说明:https://www.cnblogs.com/H-R-J/p/11882224.html

  3. ListBox重绘: https://www.freesion.com/article/3893191680/

  4. ListBox简单使用:https://www.codenong.com/cs109127861/

  5. 微软文档:https://learn.microsoft.com/zh-cn/windows/win32/msi/listbox-control

  6. DRAWITEMSTRUCT 结构: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/ns-winuser-drawitemstruct

项目地址

  • https://github.com/wa-kakalala/QQMsgList

相关文章:

Win32 ListBox控件

Win32 ListBox控件 创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …...

最大值池化与均值池化比较分析

1 问题在深度学习的卷积网络过程中&#xff0c;神经网络有卷积层&#xff0c;池化层&#xff0c;全连接层。而池化层有最大值池化和均值池化两种情况&#xff0c;而我们组就在思考&#xff0c;最大值池化和均值池化有什么区别呢&#xff1f;两者的模型准确率是否有所不同&#…...

统计学 多元线性回归

文章目录统计学 多元线性回归多元线性回归模型拟合优度显著性检验线性关系检验回归系数检验多重共线性及其处理多重共线性的问题多重共线性的识别与处理变量选择利用回归方程进行预测哑变量回归统计学 多元线性回归 多元线性回归模型 多元线性回归模型&#xff1a;设因变量为…...

tar和gzip压缩和解压

打包和压缩的区别&#xff1a;打包&#xff1a;将多文件 封装在一起压缩&#xff1a;将多文件 封装在一起 通过特定的算法 将冗余的数据 进行删除tar默认是打包命令&#xff0c;如果想用tar进行压缩 必须加选项1、gzip格式压缩&#xff1a;tar zcvf 压缩包包名 文件1 文件2 文件…...

搭建Docker企业私有仓库

什么是仓库 仓库&#xff08;Repository&#xff09;是存储和分发 Docker 镜像的地方。镜像仓库类似于代码仓库&#xff0c;Docker Hub 的命名来自 GitHub&#xff0c;Github 是我们常用的代码存储和分发的地方。同样 Docker Hub 是用来提供 Docker 镜像存储和分发的地方。 谈…...

[NOIP2009 提高组] 最优贸易(C++,tarjan,topo,DP)

题目描述 $C 国有国有国有 n 个大城市和个大城市和个大城市和 m$ 条道路&#xff0c;每条道路连接这 nnn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mmm 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的…...

计算机网络:移动IP

移动IP相关概念 移动IP技术是移动结点&#xff08;计算机/服务器&#xff09;以固体的网络IP地址&#xff0c;实现跨越不同网段的漫游功能&#xff0c;并保证了基于网络IP的网络权限在漫游中不发生任何改变。移动结点&#xff1a;具有永久IP地址的设备。归属代理&#xff08;本…...

binutils工具集——GNU binutils工具集简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 GNU binutils是一个二进制工具集&#xff0c;主要包括&#xff1a; ld&#xff0c;GNU链接器。as&#xff0c;GNU汇编器。addr2line&#xff0c;把地址转化为文件名和行号。nm&#xff0c;列出目标文件的符…...

Golang编译选项(ldflags)有趣应用

本文介绍如何在构建时使用ldflags选项给Golang应用程序注入变量&#xff0c;用于给Go可执行文件增加版本标识或GIT提交摘要等信息。 应用程序的版本信息 我们首先查看Docker Cli 包含的提交信息&#xff1a; docker version 返回结果&#xff1a; Server: Docker Engine - Co…...

AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动

目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告AIR32F103(二) Linux环境和LibOpenCM3项目模板AIR32F103(三) Linux环境基于标准外设库的项目模板AIR32F103(四) 27倍频216MHz,CoreMark跑分测试AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码AIR32F103(六) ADC,I2S…...

Uipath Excel 自动化基础系列文章

Uipath Excel 自动化基础系列文章已发布到CSDN,网址&#xff1a;https://blog.csdn.net/Marshaljun?typeblog (3月份会在CSDN博客发布Uipath Excel 实战课程及经验分享) Uipath Studio流程设计器介绍 https://blog.csdn.net/Marshaljun/article/details/128699022 Uipath St…...

神经网络优化器之随机梯度下降法的理解

随机梯度下降法&#xff08;SGD&#xff09;随机梯度下降方法&#xff0c;在每次更新时用1个样本&#xff0c;随机也就是说我们用样本中的一个例子来近似我所有的样本&#xff0c;由于计算得到的并不是准确的一个梯度&#xff0c;因而不是全局最优的。但是相比于批量梯度&#…...

记录一次WIN11开机在登录页面循环的问题

记录一次由于未进行win密码设置&#xff0c;导致开机后卡在登录界面无法登录进去的问题。最后完美解决了。 1. 背景 开机后&#xff0c;显示用户登录界面&#xff0c;但是和以往不同&#xff0c;没有了密码输入框&#xff0c;只有一个“登录”按钮孤零零地显示在屏幕中间&…...

始终从最不易改变的方面开始

在你刚开始新工作、转换职业或者是加入新项目时&#xff0c;始终从最不易改变的方面开始。 在工作中&#xff0c;这可能意味着与团队成员建立关系&#xff0c;了解公司的流程和文化&#xff0c;或者熟悉公司的产品或服务。 在一项新项目中&#xff0c;这可能意味着了解项目范…...

4、Httpclient源码解析之HTTP协议

初始化CloseableHttpClient过程中涉及ExecChainHandler & DefaultHttpProcessor&#xff0c;即典型客户端责任链中的请求执行处理器。 责任链中各节点涉及请求处理器【ExecChainHandler】顺序如下&#xff1a;RedirectExec、ContentCompressionExec、HttpRequestRetryExec…...

浏览器并发行为记录

使用nodejs koa起一个服务&#xff0c;使请求延时返回。 服务端代码 /** 延时 */ exports.timeoutTestData async function (ctx) {console.log(get query:, ctx.request.query);const query ctx.request.query;let timeout query.timeout || 2000;await new Promise(res…...

工厂模式与抽象工厂

原理&#xff1a;逻辑和业务全部封装 不需要细节 只要结果 示例&#xff1a; # 简单工厂 class SimpleFactory:# 产品staticmethoddef product(name):return nameif __name__ "__main__":product SimpleFactory.product("Gitee")print(product) 装饰器…...

什么?你不知道 ConcurrentHashMap 的 kv 不能为 null?

一、背景 最近设计某个类库时使用了 ConcurrentHashMap 最后遇到了 value 为 null 时报了空指针异常的坑。 本文想探讨下以下几个问题&#xff1a; &#xff08;1&#xff09; Map接口的常见子类的 kv 对 null 的支持情况。 &#xff08;2&#xff09;为什么 ConcurrentHashM…...

SQL复习04 | 复杂查询

1. 视图 视图和表的区别&#xff1a; 表保存的是实际的数据视图保存的是SELECT语句 视图的优点&#xff1a; 视图无需保存数据&#xff0c;可节省存储设备的容量可以将频繁使用的SELECT语句保存成视图&#xff0c;可大大提高效率 1.1 创建视图 CREATE VIEW 视图名称&…...

【面试题】Java面试题汇总(无解答)

此内容会持续补充。。。 基础 short s1 1; s1 s1 1;有错吗? short s1 1; s1 1; 有错吗&#xff1f;String str”aaa”,与 String strnew String(“aaa”)一样吗&#xff1f;String 和 StringBuilder、StringBuffer 的区别&#xff1f;Sring最大能存多大内容&#xff1f…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...