MS Flex Grid控件是微软的一个网格控件,可以用于显示数据库中的信息,对于
一些比较简单的显示方式,还是比较方便的。
    加入MS Flex Grid控件控件的方法:
      在VC中选择Project|Add to Project|Conpenments and Controls 在弹出的对话框中
选择Registered ActiveX Controls然后选择Microsoft FlexGrid Control, version 6.0。
系统会提示你加入几个类进入你的工程。包括四个类:
CMSFlexGrid,CRowCursor,COleFont,CPicture;
同时在VC的Control面板上会显示出MS Flex Grid控件的图标,可以同其他普通
控件一样操作这个控件。

一、引言
    MSFlexGrid控件是Visual C++中提供的已注册ActiveX控件,它常被用于显示和操作表格式数据,特别是数据库文件的显示及交互操作。在其他程序的交互界面中,对于不确定数目的同
类大批量数据的输入而言,MSFlexGrid是十分有效的。利用MSFlexGrid可以将输入文件中的数据显示出来并作交互修改,通过功能扩展可将表格数据直接copyExcelWordOrigin中的表格内,利用右键菜单实现此功能。本文编程实现了上述类似功能,并将MSFlexGrid控件的一些调整操作(如行高、列宽、Cell内容的对齐方式等)加以外部按钮化,使其更为方便易用。
    二、先行者对MSFlexGrid控件功能的扩充
    王勇、李延平[1]提出在MSFlexGrid的当前网格单元(Cell)内创建同样尺寸的编辑框(CEdit)覆盖该Cell,并将Cell内的Text传给编辑框,通过此编辑框以实现MSFlexGrid的网格编辑功能。秦胜[2]提出用信息预解释(PreTranslate)方法,截留编辑框(CEdit)内的ESC键与回车键(Enter)按下消息,以防止在编辑框内不小心按下上述两按键之一时立刻关闭对话框,退出整个程序。李强[3]在此基础上作了一些改进:MSFlexGrid控件的Scroll消息响应中,若存在编辑框,则将其销毁。编辑框内ESCEnter键消息的PreTranslate,以防止退出整个对话框程序。使编辑框同MSFlexGrid使用的字体一致。④“高亮度显示动态创建的编辑框。魏会君[4]用控件聚合技术实现MSFlexGrid控件的Cell
辑与修改功能,并指出可将聚合后的控件编写为一个完整的新的ActiveX控件,以备频繁使用。网上一篇文章[5]VB中实现了可间隔的多列(multi Columns)选取功能,通过将已选中列的颜设置为正常选中颜(BackColorSel)来实现之。
    三、本文的改进之处
    本文除实现上述功能外,另作了如下改进:
    1 通过在当前网格单元(Current Cell)处创建同样尺寸的编辑框(CEdit)来实现对Cell内容的交互修改,由消息预解释(PreTranslateMessage)拦截编辑框内的ESCEnter键的按下消息。在Cell内按ESC键时,Cell内的值维持原值不变且EditBox销毁(DestroyWindow),但当前Cell仍具有焦点(focus);再次编辑该Cell时,不能直接生成新的编辑框,可在其附近的Cell中单击后,再单击该Cell即可生成新的编辑框。在Cell内按Enter键时,Cell的值更新为EditBox内的值,同时下一个Cell自动进入编辑状态;其顺序为自动转到同一列的下一行Cell,若已到最大行数处,则转到下一列的起始Cell FixedColumns不包括在内),若到整个MSFlexGrid的最末一个Cell,则按Enter键时,该Cell处的EditBox销毁但该Cell仍具有焦点,再对该Cell进行编辑的方法同上。
    2 网格数据自身内部及与外部表格式数据文件间的copy/paste操作功能。将外部表格式数据源(如Excel文件)内的数值直接copy/pasteMSFlexGrid中,可减少输入工作量;有时需将至MSFlexGrid的部分数值输出到Word文件的表格或OriginDataSheet用于绘图。本文利用系统剪贴板(Clipboard)来传送数值,考虑到MSFlexGrid的行之间的换行符号为\n”,而WordOrigin中的换行符号为\n\r”(Excel自动兼容两种格式)。故由MSFlexGrid数值copyClipboard时,预先将将其中的\n”符号替换为\n\r”,由外部文件pasteMSFlexGrid时作相反的替换。具体操作时,先选中MSFlexGrid内感兴趣的区域(考虑到使用方便,FixedRows/Cols不计在内),在MSFlexGrid外部的主控界面按鼠标右键自动弹出右键菜单,选择CopyPaste即可。详见源程序中。
    3 MSFlexGrid网格(Cell)属性调整操作的外部按钮化
    a. 单元格内的文本对齐方式,选中感兴趣的Cell Range,按CellAligment”按钮,弹出对齐方式对话框,由水平与垂直方向两个ComboBox组成,选择合适的选项即可。Cell内的对齐方式共有09十种,其具体功能见表1.
    1MSFlexGrid控件的CellAlignment 属性
常数
描述
FlexAlignLeftTop
0
单元内容顶部左对齐。                                       
FlexAlignLeftCenter
1
单元内容中间左对齐。对字符串的缺省设置值。                 
FlexAlignLeftBottom
2
单元内容底部左对齐。                                       
FlexAlignCenterTop
3
单元内容顶部居中。                                         
FlexAlignCenterCenter
4
单元内容中间居中。                                         
FlexAlignCenterBottom
5
单元内容底部居中。                                         
FlexAlignRightTop
6
单元内容顶部右对齐。                                        
FlexAlignRightCenter
7
单元内容中间右对齐。对数字的缺省设置值。                   
FlexAlignRightBottom
8
单元内容底部右对齐。                                       
FlexAlignGeneral
9
单元内容一般对齐方式。对字符串中间左对齐而对数值中间右对齐。
    对齐方式对话框的垂直方向ComboV,共有三项可供选择:靠上、居中与靠下;水平方向ComboH,共有四项可供选择:常规、靠左、居中与靠右。其中,常规选项相当于值为9的对齐方式(即默认对齐方式),若选择此项则自动将垂直方向ComboV设置为居中ComboV 处于Disabled状态;若选择常规此项,程序将ComboHComboV的选中状态转换为数值0rows函数的使用方法及实例8,然后返回此数值。而进入对齐方式对话框时,则根据Cell的当前对齐方式设置ComboHComboV的初始选中状态。