VC6.0中基于MSFlexGrid(ActiveX控件)的可编辑表格的制作及其若干问题的解决方案

转自:http://wxzsg007.blog.163.com/blog/static/78818911201073011113296/

一、 概述

在我们制作的用户界面中很多时候会用到表格,当然我们首先想到的是用控件,如MSFlexGrid。我们可以方便的调用控件自身的函数来对表格中的元素进行操作,但是如果要设计一个可以编辑的表格,我们该怎么办呢?事实上这种可编辑表格的应用还真的不少,主要是其用户操作的交互性较好。笔者在前一阶段开发项目时遇到了这个问题,以下介绍笔者的实现方案。

二、 可编辑表格的初步实现

1、 创建新类CCtrlEditGrid

首先创建一个单文档工程EditGrid。

接着在工程中加入MSFlexGrid控件。这是个ActiveX控件,选择AddToProject的Components and Controls Gallery选项可加入该控件。

然后以MSFlexGrid为基类创建新类CCtrlEditGrid,并添加成员函数void InitGrid()(该函数目前只是空的)和成员变量 CEdit* m_pEdit;

软件开发网 www.mscto.com

CSpinButtonCtrl* m_pSpinButtonCtrl;以后表格的实体类就是该类。

2、 在工程文件的视图类中显示表格

软件开发网 www.mscto.com

首先在视图类CEditGridView中添加成员变量CCtrlEditGrid* m_pCtrlEditGrid。

接着添加CEditGridView的消息相应函数OnCreate,在其中创建表格

m_pCtrlEditGrid = new CCtrlEditGrid;

m_pCtrlEditGrid->Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_EDITGRID);

m_pCtrlEditGrid->InitGrid ( );

然后为了和视图的大小保持一致在CEditGridView的消息相应函数OnSize中添加代码

if ( m_pCtrlEditGrid != NULL )

m_pCtrlEditGrid->MoveWindow(0,0,cx,cy);

3、 实现CCtrlEditGrid的InitGrid的函数

InitGrid完成表格的属性设置,表格初始内容的填写,可编辑控件的创建。这里的可编辑控件如CEdit,CComboBox,CSpinButtonCtrl,CDateTimeCtrl……。在本例中只使用CEdit和CSinButtonCtrl的结合这一种。如果表格中不同列之间的编辑控件不同,在程序中可以通过检测列号,来决定使用什么控件,事实上在笔者的项目中不同列之间也是使用不同编辑控件的。在此用一种控件来说明表格编辑的实现方法,读者想换其他的控件也很容易了。

void CCtrlEditGrid::InitGrid()

{ 软件开发网 www.mscto.com

//设置行数,列数

SetCols( COL_INITNUMBER );

SetRows( ROW_INITNUMBER );

软件开发网 www.mscto.com

//设置为无边框

SetBorderStyle(0);

//设置为可以改变行高列宽

SetAllowUserResizing(3);

//设置行宽列宽

CDC* pDC = GetDC();

SetRowHeightMin ( ( long )( ROW_HEIGHT_PIXEL * 1440.0 / pDC->GetDeviceCaps(LOGPIXELSY)) );//坐标单位要转换

for ( int i = 0; i < COL_INITNUMBER; i )

SetColWidth ( i,( long ) ( COL_WIDTH_INDEX_PIXEL * 1440.0 / pDC->GetDeviceCaps(LOGPIXELSX) ) );

ReleaseDC(pDC);

<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值