关闭

ListControl控件绘制网格线

3008人阅读 评论(0) 收藏 举报
分类:

重载 DrawItem 函数或Onpaint函数

首先设置ListCtrl的风格   注意去掉网格线。因为我们自己去绘制的了所以不显示网格线了。

如下即使用REPORT风格的ListCtrl控件但是不显示网格线。

LVS_REPORT & ~LVS_EX_GRIDLINES

	//listCtrl控件
	CRect listRect;
	GetClientRect(listRect);
	m_listCtr.Create(WS_VISIBLE|WS_CHILD|LVS_REPORT ,CRect(0,0,0,0),this, ID_WND_LISTCTR_LIST);
	DWORD   dwStyle =  m_listCtr.GetExtendedStyle();   
	dwStyle  |= LVS_REPORT & ~LVS_EX_GRIDLINES </span>| LVS_EX_FULLROWSELECT| LVS_SHOWSELALWAYS | LVS_EX_HEADERDRAGDROP | LVS_EX_CHECKBOXES; 
	m_listCtr.SetExtendedStyle(dwStyle); 
	m_listCtr.SetTextColor(RGB(0,207,209));

下面要注意的是:

nHightPerLine设置一个初始值,该初始值为当ListCtrl无数据时里面的ItermRect即一个网格的高度。如果没插入数据时,GetItemRect(0,&item,LVIR_BOUNDS)是返回的FALSE.

CRect item;
int nHightPerLine=18;
 if(GetItemRect(0,&item,LVIR_BOUNDS))
 {
       nHightPerLine=item.bottom-item.top;
 }


网络上大部分是下面这样写的。导致如果没数据插入时,直接return了。导致画出来的是没有横线,只有纵线的。

if(!GetItemRect(0,&rect, LVIR_BOUNDS ))
return;


void CMyListCtrl::OnPaint()
{
	CListCtrl::OnPaint();

	// Do not call CListCtrl::OnPaint() for painting messages

	const MSG *msg = GetCurrentMessage();
	DefWindowProc( msg->message, msg->wParam, msg->lParam );

	CClientDC dc(this );
	CRect rect;
	GetClientRect(&rect);

	CHeaderCtrl* pHeader=(CHeaderCtrl*)GetDlgItem(0);
	int nColumnCount=pHeader->GetItemCount();

	CRect rectHead;
	pHeader->GetClientRect(&rectHead);

	if( (GetStyle() & LVS_TYPEMASK) == LVS_REPORT )
	{
		CPen penGrid;
		penGrid.CreatePen(PS_SOLID,2,RGB(0,66,66));//颜色

		CPen *oldPen=dc.SelectObject(&penGrid);

		int borderx =0-GetScrollPos(SB_HORZ);

		//取客户区域

		CRect item;
		int nHightPerLine=18;
		if(GetItemRect(0,&item,LVIR_BOUNDS))
		{
			nHightPerLine=item.bottom-item.top;
		}

		//画纵向线
		for( int i=0;i<nColumnCount;i++)
		{
			borderx+=GetColumnWidth(i);

			if (borderx>rect.right)
			{
				break;
			}

			dc.MoveTo(borderx,rectHead.bottom);
			dc.LineTo(borderx,rect.bottom);
		}

		//画横向线
		for(int i = 0; i <= GetCountPerPage(); i++ )
		{

			dc.MoveTo(rect.left,rectHead.bottom+nHightPerLine*i+1);
			dc.LineTo(borderx,rectHead.bottom+nHightPerLine*i+1);
		}

		dc.SelectObject(penGrid);
		penGrid.DeleteObject();
	}

}

效果如图。



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

在MFC中列表框控件 添加网格简单解析

2012-03-28 01:01 4728人阅读 评论(4) 收藏 举报 mfcdialog电话工作 第一步:向界面中添加“列表框控件”,用鼠标拖进来      第二步:设...
  • u011774239
  • u011774239
  • 2014-06-13 00:38
  • 2024

MFC控件List Control的样式LVS_与扩展样式LVS_EX_

1. 首先区分LVS_与LVS_EX_,哪些是常规样式,哪些是扩展样式:能在属性对话框里看到的样式都是常规样式,例如LVS_REPORT。 扩展样式: LVS_EX_CHECKBOX...
  • whysnlc
  • whysnlc
  • 2012-07-25 11:37
  • 2842

MFC ListControl用法

在原来博客中有:MF CListControl 简单功能使用 今天又重新来介绍点新东西:双击击listcontrol  做出响应。 主要有 1 插入数据 2 得到listctrl 中所有行的check...
  • u010236550
  • u010236550
  • 2014-10-11 13:40
  • 2421

VS2010/MFC编程初识一【ListControl列表视图控件和SliderControl滑块控件的 基本用法】

这几天原本是打算从最基本的开始学习C++,但是由于工作需要,我并没有太多时间从头开始学习,所以只能从安排给我的工作内容中一边完成工作一边学习。 这两天用到了ListControl列表视图控件和Slid...
  • j755ing
  • j755ing
  • 2017-01-21 14:13
  • 788

在MFC中列表框控件 添加网格简单解析

2012-03-28 01:01 4728人阅读 评论(4) 收藏 举报 mfcdialog电话工作 第一步:向界面中添加“列表框控件”,用鼠标拖进来      第二步:设...
  • u011774239
  • u011774239
  • 2014-06-13 00:38
  • 2024

VC 双击编辑ListControl中的数据

最近在拿一些小的项目练习MFC,遇到不少问题,期中之一便是修改列表框中的数据,查阅了一些资料,总结了一些方法,把期中最简单方便的一种方法在这里做简单介绍。 想要双击实现修改列表框内容,只需四步: ...
  • lx624909677
  • lx624909677
  • 2013-12-26 21:24
  • 8250

ListCtrl控件数据动态修改(List_Control)

vc6.0中ListCtrl控件数据动态修改(List_Control),在code projec 有个外国人写过一篇文章,是利用一个文本框实现,思路是: 将文本框设置成无边框性质,编辑之前文本框是不...
  • yinbinglengyue
  • yinbinglengyue
  • 2013-11-19 09:10
  • 2496

ListCtrl----虚拟列表的用法

一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。 二、为什么使用虚拟列表控件 我们知道,通常使用列表控件CListCtrl,需要调用InsertIte...
  • u011244446
  • u011244446
  • 2014-07-09 17:59
  • 1108

MFC——Listcontrol 添加背景颜色

在MFC中,我们经常会需要给自己的Listcontrol 添加背景颜色,下面便是如何添加的详细过程。首先需要你的程序有一个ListCtrl在对话框上,并且这个ListCtrl处于Report和多列模式...
  • perfectguyipeng
  • perfectguyipeng
  • 2017-05-02 16:35
  • 1589

CToolTip使用&CListCtrl添加多行提示

ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl。 一般用法步骤: 添加CToolTipCtrl成员变量 m_tt。 在父窗口中调用EnableToolTip...
  • shuaiqidiudiu
  • shuaiqidiudiu
  • 2013-08-06 08:32
  • 2031
    个人资料
    • 访问:370379次
    • 积分:4479
    • 等级:
    • 排名:第7764名
    • 原创:62篇
    • 转载:248篇
    • 译文:0篇
    • 评论:53条
    最新评论