CGridCtrl 的使用

xiaodong60606 2013-08-05 10:46:17
void CDemoView::SetGrid(int nRowCount) 
{
CGridCtrl * m_pGridCtrl=new CGridCtrl(nRowCount,9,1,1);
//创建 Gridctrl 窗口
CRect rect;
GetClientRect(rect);
m_pGridCtrl->Create(rect, this, 100);
//填充每格数据
CDC *pDC;
pDC=m_pGridCtrl->GetDC();
CSize cellSize;
GV_ITEM Item;
Item.mask = GVIF_TEXT|GVIF_FORMAT;
Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
CRect tempRect;
if (m_pGridCtrl->GetSafeHwnd())
{
for (int j=1;j<nRowCount+1;j++)
{
for(int i=0;i<=10;i++)
{
Item.col=i;
Item.row=j;
m_pGridCtrl->SetFixedCellCombine(0,i,0,0);
switch(i)
{
case 0:
Item.szText.Format("%d",j);
cellSize=pDC->GetTextExtent("000");
m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);
break;
case 1:
Item.szText.Format(_T("0"));
default:
Item.szText.Format(_T("0"));
}
m_pGridCtrl->SetItem(&Item);
}
}
}
TRACE("%d",m_pGridCtrl->GetRowCount());
}

如果我传入的行数是2,

这样是正确的,
现在如果我再传入的行数是4,

显示也是正确的,但是只能选择前面插入的2行,后来插入的两行根本就不能选择。

如果我刚开始插入的是4,第二次插入2,显示也是两行,但是点击两行下面的空白部分,第一次插入的4行都会显示出来,如下图

为什么呢?好像只是刷新了界面,表格本身没有刷新。
...全文
407 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
一个表, 可以 有多行 多列。
但是我每次都生成了一个表。
schlafenhamster 2013-08-06
  • 打赏
  • 举报
回复
一个表, 可以 有多行 多列。
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
“在view里面有多少个new CGridCtrl(nRowCount,9,1,1),” 为什么要 多个 , 一个不够吗 ?
以前我是这样写的 CGridCtrl * m_pGridCtrl=new CGridCtrl(nRowCount,9,1,1); 所以每次进void CDemoView::SetGrid(int nRowCount) 函数,就会生成一个CGridCtrl,然后就越来越多,然后每次OnPaint的时候,都会从头开始画,有几个CGridCtrl,就画几个。
schlafenhamster 2013-08-06
  • 打赏
  • 举报
回复
“在view里面有多少个new CGridCtrl(nRowCount,9,1,1),” 为什么要 多个 , 一个不够吗 ?
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
参考:”GridCtrlDemo“ “http://download.csdn.net/download/haosw86/1841180”
改成这样就可以了
void CDemoView::SetGrid(int nRowCount) 
{
	if(m_pGridCtrl==NULL)
	{
		m_pGridCtrl=new CGridCtrl(1,9,1,1);
		//创建 Gridctrl 窗口
		CRect rect;
		GetClientRect(rect);
		m_pGridCtrl->Create(rect, this, 100);
	}
	m_pGridCtrl->DeleteNonFixedRows();
	for (int i=0;i<nRowCount;i++)
	{
		m_pGridCtrl->InsertRow("0");
	}
	//填充每格数据
	CDC *pDC;	 
	pDC=m_pGridCtrl->GetDC();
	CSize cellSize;
	GV_ITEM Item;
	Item.mask = GVIF_TEXT|GVIF_FORMAT;
	Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
	CRect tempRect;
	if (m_pGridCtrl->GetSafeHwnd())
	{   
		for (int j=1;j<nRowCount+1;j++)
		{
			for(int i=0;i<=10;i++)
			{
				Item.col=i;
				Item.row=j;
				m_pGridCtrl->SetFixedCellCombine(0,i,0,0);
				switch(i)
				{
				case 0:
					Item.szText.Format("%d",j);
					cellSize=pDC->GetTextExtent("000");
					m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);
					break;
				case 1:
					Item.szText.Format(_T("0"));
				default:
					Item.szText.Format(_T("0"));
				}
				m_pGridCtrl->SetItem(&Item);
			}
		}		  		 
	}
	m_pGridCtrl->Invalidate(TRUE);
}
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
参考:”GridCtrlDemo“ “http://download.csdn.net/download/haosw86/1841180”
在view里面有多少个new CGridCtrl(nRowCount,9,1,1),在OnPaint里面就画多少个CGridCtrl,为什么?我试了一下,每次OnPaint的时候,会把以前的CGridCtrl对象也画一遍。
schlafenhamster 2013-08-06
  • 打赏
  • 举报
回复
参考:”GridCtrlDemo“ “http://download.csdn.net/download/haosw86/1841180”
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 2 楼 hdg3707 的回复:
m_pGridCtrl.Invalidate();如果没有这个函数,就找Update()或Refresh(),但第一个好象就可以
主要是显示是正常的,但是好像内部还是上一次的表格,比如第一次显示1行,然后我再次让它显示2行,显示确实是两行,但是只能选择第一行,第二行不能选择,一拖动表格大小,有显示成1行了,让程序隐藏了,重新显示一下,还是显示2行。
xiaodong60606 2013-08-06
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
CGridCtrl * m_pGridCtrl=new CGridCtrl(nRowCount,9,1,1); 怎么是个局部变量 ?
全局的也是一样。
schlafenhamster 2013-08-06
  • 打赏
  • 举报
回复
CGridCtrl * m_pGridCtrl=new CGridCtrl(nRowCount,9,1,1); 怎么是个局部变量 ?
hdg3707 2013-08-06
  • 打赏
  • 举报
回复
m_pGridCtrl.Invalidate();如果没有这个函数,就找Update()或Refresh(),但第一个好象就可以
schlafenhamster 2013-08-06
  • 打赏
  • 举报
回复
如果需要多个表, 那就要创建CGridCtrl 的 多个 实例。 即 m_pGridCtrl 不是 1个 而是 多个 m_pGridCtrl1 m_pGridCtrl2 m_pGridCtrl3 并且要在窗口的 不同 位置。
xiaodong60606 2013-08-05
  • 打赏
  • 举报
回复
怎么没有人回复啊?自己顶一下。

15,979

社区成员

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

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