急切问一个问题listview的问题,希望高手看看想想办法!

cismylife 2009-12-08 03:10:25
我在定时器中有一个这样的一个函数,用来实现每秒遍历一边阻塞队列,然后把阻塞队列里的每一个阻塞时间-1显示在listview控件上面,我这个空间分为两栏,一个是进程名称,一个是阻塞时间。
{
if(!EmptyQueue(zuse))
{
zusenum=NumQueue(zuse);
for(j=0;j<zusenum;j++)
{
zusePCB=OutQueue(zuse);
if(zusePCB->zuseTime!=0)
{
SendMessage(hList,LVM_DELETEITEM,0,0);
sprintf(zusetmp,"%d",zusePCB->zuseTime);
LV_ITEM item;
item.mask=LVIF_TEXT;
item.iItem=0;
item.iSubItem=0;
item.pszText=zusePCB->name;
SendMessage(hList,LVM_INSERTITEM,(WPARAM)0,(WPARAM)&item);
item.iSubItem=1;
item.pszText=zusetmp;//其实每一秒需要修改的是这里,所以我想每次只是更改第二栏的内容而不是重新插入新的item项,因为我有多个阻塞进程,需要同时在listview中显示时间的倒计时
SendMessage(hList,LVM_SETITEM,(WPARAM)0,(WPARAM)&item);//这句是重新建立第一列和第二列不行
zusePCB->zuseTime-=1;
InQueue(zuse,zusePCB);
}
else
{
//唤醒进程
}
}
}
}
可能说的不清楚,我看大家不明白我在说说看吧。
...全文
155 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2009-12-09
  • 打赏
  • 举报
回复
你的目的知道了,那你的问题是...?
LPR_Pro 2009-12-09
  • 打赏
  • 举报
回复
UP
向立天 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cismylife 的回复:]
引用 8 楼 xianglitian 的回复:
引用 4 楼 cismylife 的回复:
引用 2 楼 xianglitian 的回复:
如果可以获得listview的句柄
可以用setitemText达到你的要求

我对编辑框控件都是用settext的,我可以获得listview的句柄,但是不知道如何用settext给第二列赋值


SetItemText(nRow, nCol, text);

我没有用mfc写,用sdk写的,只能发送消息那种
[/Quote]

一样的
SetItemText有对应的消息
查一下MSDN
cnzdgs 2009-12-08
  • 打赏
  • 举报
回复
用LVM_SETITEMTEXT消息,在结构中填写掩码、item及subitem索引值、文字及长度等。详见MSDN。
cismylife 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianglitian 的回复:]
引用 4 楼 cismylife 的回复:
引用 2 楼 xianglitian 的回复:
如果可以获得listview的句柄
可以用setitemText达到你的要求

我对编辑框控件都是用settext的,我可以获得listview的句柄,但是不知道如何用settext给第二列赋值


SetItemText(nRow, nCol, text);
[/Quote]
我没有用mfc写,用sdk写的,只能发送消息那种
cismylife 2009-12-08
  • 打赏
  • 举报
回复
其实我是想每次更改第二列的内容,而不是删除listview中的一个item,然后重新建立,因为我是没秒调用一次。
向立天 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cismylife 的回复:]
引用 2 楼 xianglitian 的回复:
如果可以获得listview的句柄
可以用setitemText达到你的要求

我对编辑框控件都是用settext的,我可以获得listview的句柄,但是不知道如何用settext给第二列赋值
[/Quote]

SetItemText(nRow, nCol, text);
cismylife 2009-12-08
  • 打赏
  • 举报
回复
我想说明一下我要实现的功能,我有一个阻塞队列,里面都是一个指向进程控制块的指针,如果阻塞队列不空,那么每一秒我都要显示阻塞队列中每一个进程控制块的阻塞时间,并且没过一秒中阻塞时间减一,也就是给每一个进程控制块倒计时,当她减到0时,唤醒。不知道我说清楚了没有
cismylife 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 healer_kx 的回复:]
你说的进程,线程还是???

最后:
为什么用SendMessage呢?
SendMessage(hList,LVM_INSERTITEM,(WPARAM)0,(WPARAM)&item);
不是又
ListView_Insert这些宏API吗?再说了,你现在用的可是MFC啊~



[/Quote]
我在写进程模拟程序
因为我想用winsdk实现,所以就用了sdk和mfc混编了,因为我原先看过一片这个文章,在sdk下使用mfc的listview控件
雪影 2009-12-08
  • 打赏
  • 举报
回复
SendMessage(hList,LVM_SETITEM,(WPARAM)0,(WPARAM)&item);
这是设置list item项的数据.每次自能设置一项.

你每行有两项数据,因此需要调用两次.另外注意维护item.iItem,item.iSubItem的值.

尤其要是你每次item.iItem都等于0的时候,只会设置第一行的item表项数据,其他表项的都没有设置数据
cismylife 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xianglitian 的回复:]
如果可以获得listview的句柄
可以用setitemText达到你的要求
[/Quote]
我对编辑框控件都是用settext的,我可以获得listview的句柄,但是不知道如何用settext给第二列赋值
healer_kx 2009-12-08
  • 打赏
  • 举报
回复
你说的进程,线程还是???

最后:
为什么用SendMessage呢?
SendMessage(hList,LVM_INSERTITEM,(WPARAM)0,(WPARAM)&item);
不是又
ListView_Insert这些宏API吗?再说了,你现在用的可是MFC啊~


向立天 2009-12-08
  • 打赏
  • 举报
回复
如果可以获得listview的句柄
可以用setitemText达到你的要求
老吴笔记 2009-12-08
  • 打赏
  • 举报
回复
不是很明白,没找到问题在哪

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧