listview自画模式可以只自画一行而其它按默认画吗? 请问listview自画模式可以只自画一行而其它按默认画吗?比如我只想自画最后一行,而前面所有行都是按LISTVIEW默认的显示要怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你需要处理ListView发给父窗口的WM_NOTIFY消息:抄一段给你://父窗口处理WM_NOTIFY消息的一段代码//WPARAM wParam//LPARAM lParamLPNMHDR pHdr = LPNMHDR(lParam);UINT code = pHdr->code;NMLVCUSTOMDRAW* pInfo = (NMLVCUSTOMDRAW*)lParam;DWORD stage = pInfo->nmcd.dwDrawStage;LRESULT result = CDRF_DODEFAULT;if(stage & CDDS_PREPAINT){ if((stage & CDDS_ITEM) == 0) { //控件本身的绘制通知 /* DrawListView();//自身的绘制采用默认动作,否则你应在这里写你的控件绘制代码 return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了控件本身的绘制 */ /* return CDRF_DODEFAULT//告诉系统执行默认的控件绘制工作,后面不会再针对Item和SubItem触发WM_NOTIFY消息 */ return CDRF_NOTIFYITEMDRAW;//简单告诉系统要对每一个Item触发WM_NOTIFY消息,并且控件执行默认的绘制 } else { //Item的绘制代码 if(ViewMode == ListView_Report)//Report模式,列表模式 { if((stage & CDDS_SUBITEM) != CDDS_SUBITEM) { //Item本身的绘制通知 /* DrawItem(...);//Item本身的绘制可以在这里进行, return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。 */ return CDRF_NOTIFYSUBITEMDRAW;//通知系统要对每一个SubItem触发WM_NOTIFY消息 } else { //SubItem的绘制通知 /* DrawSubItem(); return CDRF_SKIPDEFAULT;//告诉系统我已经接管了SubItem绘制工作,系统以后就不会画蛇添足的再绘制了。 */ return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作 } } else//非列表模式 { /* DrawItem(...);//Item本身的绘制可以在这里进行, return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。 */ return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作 } }}//记得要给分哦,写这个我费了力的。 你需要处理ListView发给父窗口的WM_NOTIFY消息:抄一段给你://父窗口处理WM_NOTIFY消息的一段代码//WPARAM wParam//LPARAM lParamLPNMHDR pHdr = LPNMHDR(lParam);UINT code = pHdr->code;NMLVCUSTOMDRAW* pInfo = (NMLVCUSTOMDRAW*)lParam;DWORD stage = pInfo->nmcd.dwDrawStage;LRESULT result = CDRF_DODEFAULT;if(stage & CDDS_PREPAINT){ if((stage & CDDS_ITEM) == 0) { //控件本身的绘制通知 /* DrawListView();//自身的绘制采用默认动作,否则你应在这里写你的控件绘制代码 return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了控件本身的绘制 */ /* return CDRF_DODEFAULT//告诉系统执行默认的控件绘制工作,后面不会再针对Item和SubItem触发WM_NOTIFY消息 */ return CDRF_NOTIFYITEMDRAW;//简单告诉系统要对每一个Item触发WM_NOTIFY消息,并且控件执行默认的绘制 } else { //Item的绘制代码 if(ViewMode == ListView_Report)//Report模式,列表模式 { if((stage & CDDS_SUBITEM) != CDDS_SUBITEM) { //Item本身的绘制通知 /* DrawItem(...);//Item本身的绘制可以在这里进行, return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。 */ return CDRF_NOTIFYSUBITEMDRAW;//通知系统要对每一个SubItem触发WM_NOTIFY消息 } else { //SubItem的绘制通知 /* DrawSubItem(); return CDRF_SKIPDEFAULT;//告诉系统我已经接管了SubItem绘制工作,系统以后就不会画蛇添足的再绘制了。 */ return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作 } } else//非列表模式 { /* DrawItem(...);//Item本身的绘制可以在这里进行, return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。 */ return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作 } }}//记得要给分哦,写这个我费了力的。 DirectSound基础问题 图形化仿真软件怎么做,急用,各位大神,求解答 vc++中自定义光标 mfc中有没有函数可以改变Client area的大小,而不改变nonclient的大小 WSASocket中的WSA是什么意思? 求救! 局域网内 访问共享文件 如何在拉着对话框的边框改变大小时,让它成比例的变化.就像视频播放软件哪样. 加急求救“SOS”!! 拜托大家,很急,请各位大虾帮忙,送分啦 应用程序的进程能在任务管理器中不显示吗? XP系统下,.cpl文件无法删除? 求助:如何给LIST控件加水平滚动条
抄一段给你://父窗口处理WM_NOTIFY消息的一段代码
//WPARAM wParam
//LPARAM lParam
LPNMHDR pHdr = LPNMHDR(lParam);
UINT code = pHdr->code;
NMLVCUSTOMDRAW* pInfo = (NMLVCUSTOMDRAW*)lParam;
DWORD stage = pInfo->nmcd.dwDrawStage;
LRESULT result = CDRF_DODEFAULT;
if(stage & CDDS_PREPAINT)
{
if((stage & CDDS_ITEM) == 0)
{ //控件本身的绘制通知 /*
DrawListView();//自身的绘制采用默认动作,否则你应在这里写你的控件绘制代码
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了控件本身的绘制
*/ /*
return CDRF_DODEFAULT//告诉系统执行默认的控件绘制工作,后面不会再针对Item和SubItem触发WM_NOTIFY消息
*/ return CDRF_NOTIFYITEMDRAW;//简单告诉系统要对每一个Item触发WM_NOTIFY消息,并且控件执行默认的绘制
}
else
{ //Item的绘制代码
if(ViewMode == ListView_Report)//Report模式,列表模式
{
if((stage & CDDS_SUBITEM) != CDDS_SUBITEM)
{ //Item本身的绘制通知
/*
DrawItem(...);//Item本身的绘制可以在这里进行,
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。
*/
return CDRF_NOTIFYSUBITEMDRAW;//通知系统要对每一个SubItem触发WM_NOTIFY消息
}
else
{ //SubItem的绘制通知
/*
DrawSubItem();
return CDRF_SKIPDEFAULT;//告诉系统我已经接管了SubItem绘制工作,系统以后就不会画蛇添足的再绘制了。
*/
return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作
}
}
else//非列表模式
{
/*
DrawItem(...);//Item本身的绘制可以在这里进行,
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。
*/
return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作
}
}
}//记得要给分哦,写这个我费了力的。
抄一段给你://父窗口处理WM_NOTIFY消息的一段代码
//WPARAM wParam
//LPARAM lParam
LPNMHDR pHdr = LPNMHDR(lParam);
UINT code = pHdr->code;
NMLVCUSTOMDRAW* pInfo = (NMLVCUSTOMDRAW*)lParam;
DWORD stage = pInfo->nmcd.dwDrawStage;
LRESULT result = CDRF_DODEFAULT;
if(stage & CDDS_PREPAINT)
{
if((stage & CDDS_ITEM) == 0)
{ //控件本身的绘制通知 /*
DrawListView();//自身的绘制采用默认动作,否则你应在这里写你的控件绘制代码
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了控件本身的绘制
*/ /*
return CDRF_DODEFAULT//告诉系统执行默认的控件绘制工作,后面不会再针对Item和SubItem触发WM_NOTIFY消息
*/ return CDRF_NOTIFYITEMDRAW;//简单告诉系统要对每一个Item触发WM_NOTIFY消息,并且控件执行默认的绘制
}
else
{ //Item的绘制代码
if(ViewMode == ListView_Report)//Report模式,列表模式
{
if((stage & CDDS_SUBITEM) != CDDS_SUBITEM)
{ //Item本身的绘制通知
/*
DrawItem(...);//Item本身的绘制可以在这里进行,
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。
*/
return CDRF_NOTIFYSUBITEMDRAW;//通知系统要对每一个SubItem触发WM_NOTIFY消息
}
else
{ //SubItem的绘制通知
/*
DrawSubItem();
return CDRF_SKIPDEFAULT;//告诉系统我已经接管了SubItem绘制工作,系统以后就不会画蛇添足的再绘制了。
*/
return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作
}
}
else//非列表模式
{
/*
DrawItem(...);//Item本身的绘制可以在这里进行,
return CDRF_SKIPDEFAULT;//告诉系统:我已经执行了Item本身的绘制,不再劳系统您的大驾了,以后不会触发SubItem的绘制通知。
*/
return CDRF_DODEFAULT;//告诉系统执行默认的绘制工作
}
}
}//记得要给分哦,写这个我费了力的。