快被MFC的控件气得吐血了,我决定做完这个小软件后自己写控件了....
如题,我想改变ListCtrl选中一行时的颜色
如题,我想改变ListCtrl选中一行时的颜色
解决方案 »
- Win32//客服区的子窗口挂系统菜单与菜单为啥失败?
- 无语+抗议
- 装上虚拟机之后,程序获取的IP地址不正确,容易获取到虚拟网卡地址,如何获取正确IP!
- VC用DOM在内存中生成XML,如何和本地的Schema文件关联起来并校验???
- 连接数据库的方式不一样,导出数据的语句一样吗?????
- copy过来的类在classview中不可见怎么办?
- PID的显示问题
- 请问为何注册表保存不了?
- 关于MFC接口快速实现的问题
- 广求,数字图像处理之图像恢复方法与运用知识
- skinmagic换皮肤的dll可以用到64位的程序中去吗?以前是在32位工程下面用的。
- 请帮我看看OpenGL翻书页特效代码中坐标的填空,很头疼
OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
LPDRAWITEMSTRUCT 有hdc和控件选择状态等,自己随便绘制
把控件设置成自绘就不能用InsertItem了,我还想用它的...
做过一次类似的项目之后,下次可以直接把代码复制过来,减少开发时间。如果觉得MFC不方便,可以考虑换其它语言,我现在都是用.net做界面。
{
LPNMLVCUSTOMDRAW lpvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int index = pNMListView->iItem;
if ( CDDS_PREPAINT == lpvcd->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == lpvcd->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == lpvcd->nmcd.dwDrawStage )
{
int nItem=(int)(lpvcd->nmcd.dwItemSpec);
if((GetItemState(nItem, LVIS_SELECTED)==LVIS_SELECTED))
{
lpvcd->clrText = RGB(255,155,255);
lpvcd->clrTextBk = RGB(255,25,25);
}
*pResult = CDRF_DODEFAULT;
} }
用.net做界面的话就要求客户机装.net Framework吧?
redrawitem在哪里加?在lpvcd->clrTextBk后加吗?
但用了ownerdraw就不能再用InsertItem了,会报错。。
void CXXXDlg::OnNMCustomdrawListHistory(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
switch (pNMCD->hdr.code)
{
case NM_CUSTOMDRAW:
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT :
*pResult = CDRF_NOTIFYITEMDRAW;
return;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
if (GetColorOrder(lplvcd->nmcd.dwItemSpec)%2 == 1)
{
lplvcd->clrText = RGB(255,0,0);
lplvcd->clrTextBk = RGB(255,255,0);
}
else
{
lplvcd->clrText = RGB(0,0,0);
lplvcd->clrTextBk = RGB(255,255,255);
}
*pResult = CDRF_NEWFONT;
return;
}
}
*pResult = 0;
}