Win32 SDK:ListBox 为什么不整个 LB_SETTEXT
Win32 & SDK: ListBox 有个 LB_GETTEXT,为什么没有 LB_SETTEXT,想修改指定Item的Text,还真不容易。
自已写了一个,支持单选和多选模式,部分代码:
void updateListBoxItem(HWND hwnd_listbox, const int index, const char *text)
{
BOOL indexIsSelected = FALSE; //当前的 index 是否被选中 int focusedIndex = SendMessage(hwnd_listbox, LB_GETCARETINDEX, 0, 0); // 返回在多选状态下,具有焦点的条目的索引。该条目既可以被选中,也可以是没被选中。
//printf("focusedIndex:%d\n", focusedIndex); int selectedCount = SendMessage(hwnd_listbox, LB_GETSELCOUNT, 0, 0);
if(selectedCount == LB_ERR) //单选列表框
{
int selectedIndex = SendMessage(hwnd_listbox, LB_GETCURSEL, 0, 0); if(selectedIndex == index)
{
indexIsSelected = TRUE;
}
}
else
{
int selectedIndexs[selectedCount];
SendMessage(hwnd_listbox, LB_GETSELITEMS, (WPARAM)selectedCount, (LPARAM)selectedIndexs); //选回值是选中的数量 int i;
for(i = 0; i < selectedCount; i++)
{
//printf("index:%d\n", selectedIndexs[i]); if(selectedIndexs[i] == index)
{
indexIsSelected = TRUE;
break;
}
}
} insertListBoxItem(hwnd_listbox, index, text); //插入
removeListBoxItem(hwnd_listbox, index + 1); //删除 if(indexIsSelected)
{
setListBoxSelectedIndex(hwnd_listbox, index); //设置选中
} //设置焦点index
if(focusedIndex > -1)
{
SendMessage(hwnd_listbox, LB_SETCARETINDEX, focusedIndex, MAKELONG(TRUE, 0));
}
}
下面是ListBox部分操作指南,来源于互联网:
//获取列表框中的字符串的数目
//返回值:列表框中的字符串的数目
//----------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETCOUNT, 0, 0);
//----------------------------------------------------------------
//获取列表框的可水平滚动宽度(以像素pixel为单位)
//返回值:列表框的水平滚动宽度
//----------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETHORIZONTALEXTENT,0, 0);
//----------------------------------------------------------------
//设置列表框的可水平滚动宽度(以像素pixel为单位)
//cxExtent:水平滚动宽度!
//返回值:无
//----------------------------------------------------------------
int cxExtent
SendMessage(listbox1.hWnd, LB_SETHORIZONTALEXTENT, cxExtent, 0);
//----------------------------------------------------------------
//取得列表框中第一个(顶部)可见项的索引(以0为基数)
//在开始时,项0在列表框顶部,但如果列表框可滚动,则会有另一项滚功到顶部
//返回值:成功,返回列表框中第一个(顶部)可见项的索引.失败,返回LB_ERR.
//----------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETTOPINDEX, 0, 0);
//----------------------------------------------------------------
//设置列表框中第一个(顶部)可见项的索引(以0为基数)
//控件保证这个项可见,系统滚动列表框,直到它出现在顶部或最大移动范围
//返回值:成功,返回0.失败,返回LB_ERR.
//----------------------------------------------------------------
int nIndex
SendMessage(listbox1.hWnd, LB_SETTOPINDEX, nIndex, 0);
//----------------------------------------------------------------
//获取列表框中的列表串的locale标识符(LCID)
//locale用于确定有序列表框中列表串的排列顺序
//返回值:列表框中的列表串的locale标识符(LCID)
//----------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETLOCALE, 0, 0);
//----------------------------------------------------------------
//设置列表框中的locale标识符(LCID)
//locale标识符用于确定有序列表框中列表串的排列顺序
//nNewLocale:新的locale标识符(LCID)
//返回值:列表框中原本的locale标识符(LCID)
//----------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_SETLOCALE, (WPARAM)nNewLocale, 0);
//---------------------------------------------------------------
//为列表框的项和字符串预先分配内存,在要增加大量的列表项之前调用
//nItems:要增加的项数
//nBytes:为项的字符串分配的内存的字节大小
//返回值:成功,在分配之前可储存的最大项数 ( int )
//---------------------------------------------------------------
int nItems, UINT nBytes
SendMessage(listbox1.hWnd, LB_INITSTORAGE, (WPARAM)nItems, nBytes);
//---------------------------------------------------------------
//确定与pt指定的点最近的列表框项!此函数可用于确定光标所在的的项
//pt:一个POINT结构,相对去列表框客户区的左上角.
//bOutside:如果pt在客户区外,则为TRUE,如果pt在客户区内,则为FALSE.
//返回值:与pt点最近的项索引.
//---------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));
//---------------------------------------------------------------
//获取列表框的选择项的索引
//如果无当前选择项或列表框是多选框时,否则返回LB_ERR.
//返回值:选择项的索引. (int)
//---------------------------------------------------------------
SendMessage(m_hWnd, LB_GETCURSEL, 0, 0);
//---------------------------------------------------------------
//设置列表框的当前选择项
//只能对单选列表框调用此函数,否则返回LB_ERR.
//nSelect:项索引(以0为基数),若为-1,则设列表框为无选则壮态
//返回值:成功,原本的选择项索引.若失败,则返回LB_ERR. (int)
//---------------------------------------------------------------
int nSelect
SendMessage(listbox1.hWnd, LB_SETCURSEL, nSelect, 0);
//---------------------------------------------------------------
//获取列表框中某项的选择状态,可用于单选列表框或多选列表框.
//nIndex:项的索引(以0为基数)
//返回值:若指定的项被选择,则返回正数,否则返回0.出错,返回LB_ERR.
//---------------------------------------------------------------
int nIndex
SendMessage(listbox1.hWnd, LB_GETSEL, nIndex, 0);
//---------------------------------------------------------------
//选择多项列表框中的某一项,只适用于多选列表框
//nIndex:要选则的索引号(以0为基数),如果为-1,将所有项选择或删除.
//取却于bSelect.
//bSelect:指定如何选择.
//bSelect为TRUE,项被选择并高亮显示.(默认值)
//bSelect为FALSE,项不被选择,去掉高亮显示.
//返回值:如果出错,则返回LB_ERR.
//---------------------------------------------------------------
int nIndex, BOOL bSelect
SendMessage(listbox1.hWnd, LB_SETSEL, bSelect, nIndex);
//---------------------------------------------------------------
//获取多选列表框中的选择项总数!
//返回值:多选列表框中的选择项总数,如果为单选列表框,则返回LB_ERR!
//---------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETSELCOUNT, 0, 0);
//---------------------------------------------------------------
//将多项选择框中选择项的索引序列填充缓冲区
//nMaxItems:要放入缓冲区列表索引的最大总数!
//rgIndex:指向缓冲区!
//返回值:返回放入缓和区中的项索引总数!
//---------------------------------------------------------------
int nMaxItems, LPINT rgIndex
SendMessage(listbox1.hWnd, LB_GETSELITEMS, nMaxItems, (LPARAM)rgIndex);
//---------------------------------------------------------------
//在多选列表框中设置锚点来连续选择项.
//锚点是连续选择项中的第一项或最后一项!
//nIndex:锚点,项索引.(以0为基数)
//返回值:无!
//---------------------------------------------------------------
int nIndex
SendMessage(listbox1.hWnd, LB_SETANCHORINDEX, nIndex, 0);
//---------------------------------------------------------------
//获取多选列表框中的锚点索引.(以0为基数!)
//锚点是连续选择项中的第一项或最后一项!
//返回值:成功,当前锚点索引.失败,LB_ERR.
//---------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETANCHORINDEX, 0, 0);
//---------------------------------------------------------------
//获取指定项的DWORD值数据.(一个自已放入的DWORD值数据)
//nIndex:项索引.(以0为基数)
//返回值:成功,指定项的DWORD值数据.失败,返回LB_ERR.
//---------------------------------------------------------------
int nIndex
SendMessage(listbox1.hWnd, LB_GETITEMDATA, nIndex, 0);
//---------------------------------------------------------------
//设置指定项的DWORD值数据.(自已保存起DWORD值数据)
//nIndex:项索引.(以0为基数)
//dwItemData:DWORD值数据
//返回值:失败,返回LB_ERR.
//---------------------------------------------------------------
int nIndex, DWORD dwItemData
SendMessage(listbox1.hWnd, LB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
//---------------------------------------------------------------
//获取指定项的指向数据的指针.(指针指向某一数据)
//nIndex:项索引.(以0为基数)
//返回值:成功,指向某一数据的指针.失败,返回-1.
//---------------------------------------------------------------
int nIndex
SendMessage(Listbox1.hWnd, LB_GETITEMDATA, nIndex, 0);
//---------------------------------------------------------------
//获取列表框中的某一项的矩型区域!
//nIndex:项索引(以0为基数)
//lpRect:用于保存项的矩型区域!
//返回值:如果出错,返回LB_ERR.
//---------------------------------------------------------------
int nIndex, LPRECT lpRect
SendMessage(Listbox1.hWnd, LB_GETITEMRECT, nIndex, (LPARAM)lpRect);
//---------------------------------------------------------------
//获取指定项的字符串!
//nIndex:项的索引.
//lpszBuffer:指向缓冲区,用于接收字符串!
//返回值:字符串的长度,不包括空终止符,如果nIndex无效,则返回LB_ERR.
//---------------------------------------------------------------
int nIndex, LPTSTR lpszBuffer
SendMessage(Listbox1.hWnd, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);
//---------------------------------------------------------------
//取得列表框中某一项的字符串长度!
//nIndex:字符串长度!
//返回值:字符串的长度,不包括空终止符,如果nIndex无效,则返回LB_ERR.
//---------------------------------------------------------------
int nIndex
SendMessage(Listbox1.hWnd, LB_GETTEXTLEN, nIndex, 0);
//---------------------------------------------------------------
//设置多列"列表框"的中所有的列的宽度.(像素为单位)
//多列"列表框"具有LBS_MULTICOLUMN风格!
//cxWidth:列的宽度.(像素为单位)
//返回值:无!
//---------------------------------------------------------------
int cxWidth
SendMessage(Listbox1.hWnd, LB_SETCOLUMNWIDTH, cxWidth, 0);
//---------------------------------------------------------------
//设置列表框Tab的停止位!
//nTabStops:Tab的停止位的个数!
//rgTabStops:指向Tab的停止位的数组!
//返回值:成功,返回TRUE,失败,返回FALSE.
//---------------------------------------------------------------
int nTabStops, LPINT rgTabStops
SendMessage(listbox1.hWnd, LB_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
//---------------------------------------------------------------
//设置列表框Tab的停止位!(默认两个单位)
//返回值:成功,返回TRUE,失败,返回FALSE.
//---------------------------------------------------------------
SendMessage(Listbox1.hWnd, LB_SETTABSTOPS, 0, 0);
//---------------------------------------------------------------
//设置列表框Tab的停止位!
//cxEachStop:每隔cxEachStop个对话单位设置一个Tab的停止位!
//返回值:成功,返回TRUE,失败,返回FALSE.
//---------------------------------------------------------------
int& cxEachStop
SendMessage(Listbox1.hWnd, LB_SETTABSTOPS, 1, (LPARAM)(LPINT) &cxEachStop);
//---------------------------------------------------------------
//设置项的高度!
//如果列表框具有LBS_OWNERDRAWVARIABLE风格.则设置指定索引的高度!
//否则,设置所有项的高度!
//返回值:如果索引或高度无效,用像素表示! (int)
//---------------------------------------------------------------
int nIndex, UINT cyItemHeight
SendMessage(listbox1.hWnd, LB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));
//---------------------------------------------------------------
//获取项的高度!
//如果列表框具有LBS_OWNERDRAWVARIABLE风格.则返回指定索引的高度!
//nIndex:指定项的索引.(以0为基数).
//只适用于具有LBS_OWNERDRAWVARIABLE风格地对话框.否认,应设为0.
//返回值:项的高度!
//---------------------------------------------------------------
nt nIndex
SendMessage(listbox1.hWnd, LB_GETITEMHEIGHT, nIndex, 0L);
//---------------------------------------------------------------
//查找指定字符串的索引.
//nIndexStart:从那一项开始查找的上一项索引.设为-1,则从头查找!
//如果列表框具有LBS_HASSTRINGS风格,则匹配lpszFind的DWORD值
//lpszFind:要查找的字符串!
//返回值:成功,项的索引.失败,返回LB_ERR. (int)
//---------------------------------------------------------------
int nIndexStart, LPCTSTR lpszFind
SendMessage(listbox1.hWnd, LB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);
//---------------------------------------------------------------
//确定多选框中具有焦点的项索引.项可以是已选择的或未选择的!
//返回值:具有焦点的项索引.如果是单选框,是选择项的索引.(以0为基数) (int)::
//---------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_GETCARETINDEX, 0, 0L);
//---------------------------------------------------------------
//设置多选框中具有焦点.如过项不可见的,则滚动进入视图!
//nIndex:项的索引.
//bScroll:如果值为FALSE,项滚动到完全可见.
//若为FALSE,则至于滚动到部分可见.
//返回值:具有焦点的项索引.如果是单选框,是选择项的索引.(以0为基数) (int)::
//---------------------------------------------------------------
int nIndex, BOOL bScroll
SendMessage(listbox1.hWnd, LB_SETCARETINDEX, nIndex, MAKELONG(bScroll, 0);
//---------------------------------------------------------------
//添加一个字符串(即增加一个新项)
//若列表框具有LBS_SORT风格,则调用COMPAREITME函数进行排序.
//若列表框具有LBS_HASSTRINGS风格,则加入到表尾.
//lpszItem:指向字符串.
//返回值:项的索引(以0为基数).
//出错返回LB_ERR.没有足够内存,返回LB_ERRSPACE. (int)::
//---------------------------------------------------------------
LPCTSTR lpszItem
SendMessage(listbox1.hWnd, LB_ADDSTRING, 0, (LPARAM)lpszItem);
//---------------------------------------------------------------
//从列表框中删除指定的项
//nIndex:项的索引(以0为基数).
//返回值:留在列表框中项的总数.
//如果nIndex比总数大时,则返回LB_ERR. (int)
//---------------------------------------------------------------
UINT nIndex
SendMessage(listbox1.hWnd, LB_DELETESTRING, nIndex, 0);
//---------------------------------------------------------------
//将字符串插入到指定的项中.(即增加一个新项)
//nIndex:项的索引(以0为基数).
//lpszItem:指向字符串.
//返回值:插入位置的索引(以0为基数).
//出错返回LB_ERR.没有足够内存,返回LB_ERRSPACE. (int)::
//---------------------------------------------------------------
int nIndex, LPCTSTR lpszItem
SendMessage(m_hWnd, LB_INSERTSTRING, nIndex, (LPARAM)lpszItem);
//---------------------------------------------------------------
//删除列表框中的所有项
//返回值:无!
//---------------------------------------------------------------
SendMessage(listbox1.hWnd, LB_RESETCONTENT, 0, 0);
//---------------------------------------------------------------
//添加文件名列表或驱动器列表到列表框中.
//attr:参数!
//0x0000:可读取或写入的文件
//0x0001:可读取但不可写入的文件
//0x0002:忍藏文件,不在列表框中出现.
//0x0004:系统文件.
//0x0010:由lpszWildCard指定明称,指定一个目录.
//0x0020:以归档的文件
//0x4000:包含所有和lpszWildCard匹配的名字驱动器.
//0x8000:排除标志.若设置了.则只列出指定的类型文件.
//lpszWildCard:文件名
//返回值:添加列表框中最后一项的索引号
//出错返回LB_ERR.没有足够内存,返回LB_ERRSPACE. (int)::
//---------------------------------------------------------------
UINT attr, LPCTSTR lpszWildCard
SendMessage(listbox1.hWnd, LB_DIR, attr, (LPARAM)lpszWildCard);
//---------------------------------------------------------------
//查找列表框中包含指定前睿的第一个字符串,而不该列表框的选择项.
//nStartAfter:从nStartAfter索引的前一项开始查找.
//lpszItem:要查找的字符串.(大小写敏感)
//返回值:成功,项的索引.失败,返回LB_ERR (int)::
//---------------------------------------------------------------
int nStartAfter, LPCTSTR lpszItem
SendMessage(listbox1.hWnd, LB_FINDSTRING, nStartAfter, (LPARAM)lpszItem);
//---------------------------------------------------------------
//查找列表框,匹配指定的字符串.若查找成功,则选择该项.
//如果需要,滚动列表框进入视图.
//不能用去具有LBS_MULTIPESEL风格的列表框.
//返回值:成功,所选项项的索引.失败,返回LB_ERR,选项项不变. (int)::
//---------------------------------------------------------------
int nStartAfter, LPCTSTR lpszItem
SendMessage(listbox1.hWnd, LB_SELECTSTRING,nStartAfter, (LPARAM)lpszItem);
//---------------------------------------------------------------
//在多选列表框中选择多个连续的项.(只能多选列表框中)
//bSelect:选择设置.
//若bSelect为TRUE,则字符串被选择并高亮显示.
//nFirstItem:第一的索引(基于0)
//nLastItem:最后一项的索引(基于0)
//失败,返回LB_ERR.
//---------------------------------------------------------------
BOOL bSelect, int nFirstItem, int nLastItem
SendMessage(listbox1.hWnd, LB_SELITEMRANGEEX, nFirstItem, nLastItem) :
SendMessage(listbox1.hWnd, LB_SELITEMRANGEEX, nLastItem, nFirstItem);
//----------------------------------------------------------------
Win32 SDK:ListBox 为什么不整个 LB_SETTEXT的更多相关文章
- Win32 SDK程序创建一些控件(简单调用InitCommonControlsEx,并指定ICC_LISTVIEW_CLASSES控件就可以了)
在Win32 SDK中创建一些控件的时候需要注意一下(具体是哪些控件请参看MSDN文档中列出来的) /* MSDN:Carries information used to load common co ...
- 基于Win32 SDK实现的一个简易线程池
利用C++实现了一个简易的线程池模型(基于Win32 SDK),方便使用多线程处理任务.共包含Thread.h.Thread.cpp.ThreadPool.h.ThreadPool.cpp四个源文件. ...
- VC++、Win32 SDK、MFC的区别
这是一个初进行开发人员都可能遇到过的概念不清的问题,自己当年也同样有过误解,做技术我感觉一定要专,但是,不代表毫不关心相关的知识,至少概念层次上要知道,所以,这里还是再把这些内容纪录下来,好记性不如烂 ...
- API、Win32 SDK、Win32项目、MFC、Windows窗体应用程序的区别
[原]API.Win32 SDK.Win32项目.MFC.Windows窗体应用程序的区别 首先来看一下每一个术语的定义: API:Application Programming Interface. ...
- win32 sdk绘制ListBox控件
1>产生: // HWND CreateLB(HWND parentWnd) { HWND hListBox=0; hListBox = CreateWindow("LISTBOX&q ...
- win32 清空ListBox所有内容
Q:clear listbox hi i am working in VC++ 6 using Win32 App. .............tell me how to clear the lis ...
- 使用 VS2012 开发 IDA GUI 插件 WIN32 SDK 和 内置函数 AskUsingForm_c
1. 执行菜单的File->New->Project… (Ctrl-Shift-N)打开新建工程窗口. 2. 展开左侧的Visual C++项目模板分支,然后选择右侧的Win32 Proj ...
- VC++ WIN32 sdk实现按钮自绘详解.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- VC++ WIN32 sdk实现按钮自绘详解 之二(关键是BS_OWNERDRAW和WM_DRAWITEM)
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
随机推荐
- websocket协议握手详解
最近使用tornado做长链接想着怎么着也要试试websocket协议吧.所以说干就干. 首先要知道websocket是基于http协议的,为什么这么说?因为从协议来说,websocket是借用了一部 ...
- 自定义Attribute类
在我们的项目中有时经常会标识一些类的特性,在下面我们将简短的方式来介绍如何构建自定义的Attribute类. using System; using System.Collections.Generi ...
- python标准异常
什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Python脚 ...
- 在delphi中生成GUID/自动获取临时表名......
什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...
- 一、ABP框架框架摘要
ABP框架几点说明: 一.什么是ABP ABP是一个建立在最新的ASP.NET的MVC和Web API技术的应用框架.它可以很容易地使用依赖注入.日志记录.验证.异常处理.本地化等,也使用流行的框架和 ...
- freemarker -include
在ftl中使用<#include >时 ,页面被强制显示 需要在struts.xml增加跳转type ,或则可以加同一<result-types></result-typ ...
- python命令里运行正确但是pycharm里面运行就是报错的问题
这两天在学习爬虫,第一步就是 import scrapy class StackOverflowSpider(scrapy.Spider): 结果一直报错,说是scrapy没有spider这个方法,各 ...
- Tomcat服务的安装与配置
介绍 百度百科 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开 ...
- 在 Activity 中实现 getContentView 操作
2017/9/8 17:17:03 前言 最近接到个需要优化Android原生系统设置APK的任务.这个任务里面有一个更换应用背景图片的需求.我手里的这个设备是一个平板设备,使用了一下这个 ...
- [洛谷P1273] 有线电视网
类型:树形背包 传送门:>Here< 题意:给出一棵树,根节点在转播足球赛,每个叶子节点是一个观众在收看.每个叶子结点到根节点的路径权值之和是该点转播的费用,每个叶子节点的观众都会付val ...