DrawItem CListCtrl

tanyufeng_521 2013-11-06 11:16:04
我是重载了CListCtrl的DrawItem,在Dlg中我插入了三条Item并且已经插入成功了,但是为什么DrawItem只调用了一次,而且这一次的数据都不对。不过我在对话框窗口中对这个list利用SetWindowPos进行了位置的调整,如果不调整的话哪他就是正常的,不知道为什么,大家帮忙看看
...全文
192 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2013-11-06
  • 打赏
  • 举报
回复
"不过我在对话框窗口中对这个list利用SetWindowPos进行了位置的调整" 看看你怎么调整。
worldy 2013-11-06
  • 打赏
  • 举报
回复
改变了CListCtrl的窗口风格了?
tanyufeng_521 2013-11-06
  • 打赏
  • 举报
回复
引用 9 楼 tanyufeng_521 的回复:
[quote=引用 8 楼 ftd2013 的回复:] [quote=引用 7 楼 tanyufeng_521 的回复:] [quote=引用 6 楼 ftd2013 的回复:] [quote=引用 5 楼 tanyufeng_521 的回复:] [quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时[/quote] 还是不行,我把我调整大小的语句(MoveWindow/SetWindowPos)注释掉就可以显示数据了,但我想要的就是要改变list的大小[/quote] 在初始化ListCtrl之前,改变大小。还是不行就看看OnDraw函数。“要鼠标移动到list所在的地方list才会显示出来”这句话说明重绘问题[/quote] 我把我自己重载的这个CListCtrl类放到另外一个工程,且用了同样的方式去改变大小,最终他大小变了,信息也显示出来了。可我就是不知道在现在这工程里面哪里出了问题,真纠结呀[/quote] 发现了,发现了,我终于发现问题了!!! 我就犯了一个最二的错误,我自己在重载CListCtrl的时候加了一个设置行高的功能,代码如下:

void CFriendList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
	lpMeasureItemStruct->itemHeight = m_nItemHeight;
}
可是我竟然没有给m_nItemHeight初始化,导致m_nItemHeight的不确定性,所以在DrawItem的时候数据就会不对,从而导致信息无法显示,真蛋疼,以后再也不能这么粗心了; "孤独的和弦 "哥们谢谢你,真的很感谢你,谢谢你一直帮我解答
打你屁屁 2013-11-06
  • 打赏
  • 举报
回复
引用 9 楼 tanyufeng_521 的回复:
[quote=引用 8 楼 ftd2013 的回复:] [quote=引用 7 楼 tanyufeng_521 的回复:] [quote=引用 6 楼 ftd2013 的回复:] [quote=引用 5 楼 tanyufeng_521 的回复:] [quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时[/quote] 还是不行,我把我调整大小的语句(MoveWindow/SetWindowPos)注释掉就可以显示数据了,但我想要的就是要改变list的大小[/quote] 在初始化ListCtrl之前,改变大小。还是不行就看看OnDraw函数。“要鼠标移动到list所在的地方list才会显示出来”这句话说明重绘问题[/quote] 我把我自己重载的这个CListCtrl类放到另外一个工程,且用了同样的方式去改变大小,最终他大小变了,信息也显示出来了。可我就是不知道在现在这工程里面哪里出了问题,真纠结呀[/quote] mfc是这样,牵一发动全身
tanyufeng_521 2013-11-06
  • 打赏
  • 举报
回复
引用 8 楼 ftd2013 的回复:
[quote=引用 7 楼 tanyufeng_521 的回复:] [quote=引用 6 楼 ftd2013 的回复:] [quote=引用 5 楼 tanyufeng_521 的回复:] [quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时[/quote] 还是不行,我把我调整大小的语句(MoveWindow/SetWindowPos)注释掉就可以显示数据了,但我想要的就是要改变list的大小[/quote] 在初始化ListCtrl之前,改变大小。还是不行就看看OnDraw函数。“要鼠标移动到list所在的地方list才会显示出来”这句话说明重绘问题[/quote] 我把我自己重载的这个CListCtrl类放到另外一个工程,且用了同样的方式去改变大小,最终他大小变了,信息也显示出来了。可我就是不知道在现在这工程里面哪里出了问题,真纠结呀
打你屁屁 2013-11-06
  • 打赏
  • 举报
回复
引用 7 楼 tanyufeng_521 的回复:
[quote=引用 6 楼 ftd2013 的回复:] [quote=引用 5 楼 tanyufeng_521 的回复:] [quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时[/quote] 还是不行,我把我调整大小的语句(MoveWindow/SetWindowPos)注释掉就可以显示数据了,但我想要的就是要改变list的大小[/quote] 在初始化ListCtrl之前,改变大小。还是不行就看看OnDraw函数。“要鼠标移动到list所在的地方list才会显示出来”这句话说明重绘问题
tanyufeng_521 2013-11-06
  • 打赏
  • 举报
回复
引用 6 楼 ftd2013 的回复:
[quote=引用 5 楼 tanyufeng_521 的回复:] [quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时[/quote] 还是不行,我把我调整大小的语句(MoveWindow/SetWindowPos)注释掉就可以显示数据了,但我想要的就是要改变list的大小
打你屁屁 2013-11-06
  • 打赏
  • 举报
回复
引用 5 楼 tanyufeng_521 的回复:
[quote=引用 3 楼 ftd2013 的回复:]

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来[/quote] 这代码是初始化List控件时用。就是InsertColumn时
tanyufeng_521 2013-11-06
  • 打赏
  • 举报
回复
引用 3 楼 ftd2013 的回复:

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos
你这段代码是放在,调整位置之后嘛???用MoveWindow代替还是一样,而且还不能马上显示出来,要鼠标移动到list所在的地方list才会显示出来
tanyufeng_521 2013-11-06
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
"不过我在对话框窗口中对这个list利用SetWindowPos进行了位置的调整" 看看你怎么调整。
void CMamaChatDlg::InitFriendList() { CRect rc = GetBodyRect(); CRect client; m_listFriend.GetWindowRect(&client); ScreenToClient(&rc); m_listFriend.SetWindowPos(NULL, rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW); } 调整后,窗口大小没有出现什么问题
打你屁屁 2013-11-06
  • 打赏
  • 举报
回复

SetWindowLong(m_list.m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES);
	::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
// 看看设置风格是否需要修改
另外试试MoveWindow替代SetWindowPos

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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