http://du520xi.blog.163.com/blog/static/8471920320108193939401/FlexCell控件2

2010-09-01 09:39:39|  分类: LabWindows/CVI专 |  标签:int  flextable  void  null  控件   |举报 |字号大中小 订阅

FlexCell控件另一个比较强的特点是支持多种文件格式,这节我们来正式开始使用该控件。

我做了个类似FlexCell控件自带演示程序的界面,使用CVI来使用实现该控件的所有操作。

1、添加菜单

从本节开始,我们将全面进行该控件的操作。菜单的制作方法我这里就不再说明,不知道的朋友可以参考我的视频教程,其中有菜单制作的所有过程。

2、格式说明

FlexCell控件支持自己格式的导入导出(.Cel)。XML文件的导入。EXCEL格式的导出,HTML格式的导出,XML格式的导出,CSV文件的导出。可以发现控件不能支持读取EXECL文件是一个比较遗憾的地方。所有的这些功能控件都已经为我们封装好了函数,无需我们CVI来操心。

//新建文件
void CVICALLBACK NewFile (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    int Row,Colunm;
    //得到当前行列数
    FlexCell__GridGetRows (FlexTable, NULL, &Row);
    FlexCell__GridGetCols (FlexTable, NULL, &Colunm);

FlexCell__GridNewFile (FlexTable, NULL, NULL);

//设置行列数
    FlexCell__GridSetRows (FlexTable, NULL, Row);
    FlexCell__GridSetCols (FlexTable, NULL, Colunm);
}

函数名称大家可以自己修改。这个函数比较有用,当你的控件已经进行了大量的读取和赋值后此时如果要清除所有单元格中的数据我们上一节使用过这种方法:

//设置为100行
            FlexCell__GridSetRows (FlexTable, NULL, 101);

//选择处理的行列范围
            FlexCell__GridRange (FlexTable, NULL, 1, 1, 100, 10, FlexTableRange);
            //删除现有行
            FlexCell__RangeDeleteByRow (FlexTableRange, NULL);
            //添加新的100行
            FlexCell__GridSetRows (FlexTable, NULL, 101);

我们先心中当前所有的单元格,将它们删除,然后再添加同样的行数。这个方法在行列数多时会极大影响速度。现在我们使用控件提供的新建文件的方法来实现。

FlexCell__GridNewFile (FlexTable, NULL, NULL);这个函数不需要任何其它参数,给出控件的CA对象句柄即可。此时大家可以看到控件马上恢复为添加控件时初始状态。但是这样做会自己恢复为控件默认的5列10行。这和我们在CVI定义的100行10列不一样。每个用户也都有自己的初始数量。因此,我们在使用该函数前先得到下目前控件的行列数量,在新建文件后马上设置回来。这里的新建文件和WORD中新建文件是一样的,它之所以就像清除所有单元格是因为该控件是一个单文档界面,所以新建文件就等于清除了现在的内容直接显示为一个新的表格。在多文档形式中这样新建会出现一个新的窗口,当前的窗口内容没有变化。

//打开文件
void CVICALLBACK OpenedFile (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridOpenFile (FlexTable, NULL, "", NULL);
}

该控件给我们高度封装了很多函数,我们后面使用的函数都是如此,这个打开文件的函数也不给任何参数,给了一个空字符串,函数定义如果给的是空字符串函数会自己先调用API的打开文件对话框(CVI中函数为FileSelectPopup)电你选择好需要打开的文件后函数自己处理将你选中的文件打开。省去了我们CVI打开文件的很多代码。当然你可以直接给函数传递一个文件路径“c:\\1.txt"。注意该函数打开的文件只能是CEL文件(控件自己的格式)。且为十六进制加密文件。一般不能破解。

//保存文件
void CVICALLBACK SaveFile (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    char *FileName;

//得到文件路径
    FlexCell__GridGetFilename (FlexTable, NULL, &FileName);
    if (strlen(FileName)==0)//如果是新文件
    {
        FlexCell__GridSaveFile (FlexTable, NULL, "",NULL );
    }
    else//如果是打开的文件
    {
        FlexCell__GridSaveFile (FlexTable, NULL, FileName,NULL );
    }
}

保存文件也可以直接使用一个函数,传递空字符串,函数会先打开一文件保存对话框。这里我们不能这样使用,因为我们有两种情况:一个新文件、一个打开的文件。所以要分别对待。对于新文件我们可以直接使用FlexCell__GridSaveFile (FlexTable, NULL, "",NULL );对于已经打开的文件我们应该直接保存在该文件中。

FlexCell__GridSaveFile (FlexTable, NULL, FileName,NULL );控件为我们提供了一个函数来得到上次打开或保存的文件路径FlexCell__GridGetFilename (FlexTable, NULL, &FileName);如果我们打开了一个"c:\1.txt"这个字符串会保存到GridGetFilename中。如果新建的文件,就返回空字符串。

//另存为文件
void CVICALLBACK SaveAsFile (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridSaveFile (FlexTable, NULL, "",NULL );
}

//导入XML文件
void CVICALLBACK ImportFile (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridLoadFromXML (FlexTable, NULL, "", NULL);
}

//导出EXCEL文件
void CVICALLBACK ExportXLS (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridExportToExcel (FlexTable, NULL, "", VTRUE, VTRUE, NULL);
}

//导出CSV文件
void CVICALLBACK ExportCSV (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridExportToCSV (FlexTable, NULL, "", VFALSE, VFALSE, NULL);
}

//导出XML文件
void CVICALLBACK ExportXML (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridExportToXML (FlexTable, NULL, "", NULL);
}

//导出HTML文件
void CVICALLBACK ExportHTML (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridExportToHTML (FlexTable, NULL, "", NULL);
}

这些函数同样不需要给任何其它参数,传递空字符串,函数自己打开一个对话框选择文件。

//打印设置
void CVICALLBACK PageSet (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridPrintDialog (FlexTable, NULL, NULL);
}

//打印预览
void CVICALLBACK PrintView (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridPrintPreview (FlexTable, NULL, CA_DEFAULT_VAL);
}
//打印
void CVICALLBACK PrintOut (int menuBar, int menuItem, void *callbackData,
        int panel)
{
    FlexCell__GridDirectPrint (FlexTable, NULL, CA_DEFAULT_VAL, NULL);
}

我们WORD中常用的打印功能也这样使用,大家知道在CVI中实现这样的功能不是一行函数就能完成的。现在大家就可以编译程序,来使用下我们只写了十几行代码就完成的Windows主要文件菜单功能。

结论:控件提供的文件操作函数十分强大,都不用我们关心实现流程。唯一遗憾的是不能直接打开XLS文件。不然完全可以写个基础版EXCEL程序。

摘自http://du520xi.blog.163.com/blog/static/8471920320108193939401/

附上VS2010/mfc 个人研究成果:

int Row,Colunm; //行/列
 FLEX.put_Rows(20);
 FLEX.put_Cols(8);

Row = FLEX.get_Rows();
 Colunm = FLEX.get_Cols();

//打开文件
 FLEX.OpenFile("F://wtlamfile//VS.file//flex//Debug//file.cel");
 //设置单元格内容
 CCell(FLEX.Cell(5,1)).put_Text("world");
 CCell(FLEX.Cell(5,1)).put_
 //保存文件
 FLEX.SaveFile("file.cel");
 //打印设置
 FLEX.PrintDialog();
 //打印
 FLEX.DirectPrint((_variant_t)1);

//导出为excel表格
 FLEX.ExportToExcel("F://wtlamfile//VS.file//flex//Debug//0001.xls",NULL,NULL);

VS2010/MFC flexcell使用相关推荐

  1. VS2010 MFC中 单独添加ODBC数据库记录集类(CRecordset)方法

    基于VS2010 MFC的项目是之前建好的,后来需要添加数据库. 方法分享于此. 1.  打开自己的项目,项目->添加类. 2. 选MFC ODBC使用者,点右下角的添加. 3. 点数据源. / ...

  2. VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)

    前面两节为大家讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Control. 树形控件简介 树形控件在Windows系统中是很常见的,例如资源管理器左侧的 ...

  3. VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)

    上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...

  4. VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)

    上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObje ...

  5. (转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)

    上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程 ...

  6. VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)

    上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...

  7. VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题

    今天遇到了一个问题,关于VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题. 关于CMFCToolBar的一些介绍网上也有人介绍过,就不过多介绍了,直奔主题. 解决问题的关键点就在于 ...

  8. (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  9. 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法

    [VS开发]VS2010 MFC中控件.对话框等背景颜色动态修改的方法 标签(空格分隔):[VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明: ...

最新文章

  1. 深度学习debug沉思录!
  2. 性能测试二十八:环境部署之Dubbo部署
  3. VTK:几何对象之QuadraticHexahedron
  4. SAP Fiori Elements - Smart table add button debug 2 setDirty
  5. io流不关闭会怎么样_幸福树一个月不浇水会怎么样
  6. 网络防火墙与防范溢出策略“溢出”
  7. Unity项目文件夹结构
  8. 计算机思维游戏案例doc,国外火爆的计算机思维训练游戏,国内居然不知道!
  9. 【Software】动软代码生成器
  10. HUAWEI OSPF配置
  11. SQL 错误: Statement cancelled due to client request
  12. Eth-Trunk 链路聚合
  13. Mac苹果电脑桌面上的文件突然没了怎么办
  14. 听见丨谷歌DeepMind科学家黄士杰:已离开AlphaGo团队AI芯片初创团队ThinkForce完成4.5亿元A轮融资
  15. 怎么从视频中提取音频,这四个方法简单实用!
  16. 制作U盘启动盘安装Win11系统
  17. c语言 原子 字符串,Atomic operations library(原子操作库)
  18. 浪潮优派培训笔记:Tomcat服务器
  19. 刘润:进化的力量年度演讲全文图解
  20. 开源的php网站程序,免费PHP开源CMS网站程序

热门文章

  1. 系统运维工程师面试题及参考答案
  2. 同城货运:既是矿坑也是火坑
  3. 如何在Java ME平台上获取手机串号IMMI
  4. 电竞c语言,“电竞专业”考题曝光,硬核的你能满分吗?
  5. js监控组合键,例如Ctrl+K
  6. Flutter App显示Github Readme文档
  7. PS|荷塘采荷背景渐变练习
  8. 一个批量下载3GPP文档的shell小程序
  9. 如何掌握恒指期货高手交易的赢家心态
  10. 2012年国内薪资较高的IT公司