• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
用VC设计一个可编辑的表格控件
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
用VC设计一个可编辑的表格控件
软件发布 用VC设计一个可编辑的表格控件
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VC教程 >> 用VC设计一个可编辑的表格控件

用VC设计一个可编辑的表格控件

添加时间: 2006-2-12 2:36:35  作者: VC教程  阅读次数:1130   来源: http://d9soft.com

          【实现内容】做一个可编辑的表格控件。

  【使用控件】一个MSFLEXGRID表格控件,一个文本控件,一个下拉列表控件。

  【实现原理】我喜欢把这个方法称为视觉假象。由于MSFLEXGRID控件本身是不支持直接编辑的。所以需要结合文本控件或者下拉列表控件,使表格控件的运行效果如同可以直接编辑一样。

  【实现步骤】

  1. 当鼠标点击表格控件的某一格时,首先判断该列的属性,是直接编辑呢,还是用下拉列表进行选择。

  2. 显示隐藏的文本控件或者下拉列表控件,显示的位置和大小与选中格的位置大小完全相同,这样可以覆盖选中格

  3. 将选中格的内容填到文本控件或者下拉列表控件中

  4. 修改完毕后,将新的内容填到选中格中,同时隐藏文本控件或者下拉列表控件。

  【主要程序段及说明】

  变量定义:

  CComboBox m_ChangeCombo;--下拉列表控件,初始时不可见
  CEdit m_Change;---------------文本控件,初始时不可见
  CSring m_sChange;----------------与文本控件关联的字符串
  CMSFlexGrid m_FlexGrid;-----表格控件

  程序段:

  表格点击事件:选中某一格后,就要显示相应的文本控件或者列表控件  

  void CChartInfoEditDlg::OnClickMsflexgrid()
  {
   //点击无效区,返回
   long lRow = m_FlexGrid.GetRowSel();//获取点击的行号
   long lCol = m_FlexGrid.GetColSel(); //获取点击的列号
   if(lRow>m_SAttrInfo.attrNum) //如果点击区超过最大行号,则点击是无效的
    return;
   if(lRow == 0) //如果点击标题行,也无效
    return;
   //
   CRect rect;
   m_FlexGrid.GetWindowRect(rect); //获取表格控件的窗口矩形
   ScreenToClient(rect); //转换为客户区矩形
   // MSFlexGrid 控件的函数的长度单位是"缇(twips)",
   //需要将其转化为像素,1440 缇 = 1 英寸
   CDC* pDC =GetDC();
   //计算象素点和缇的转换比例
   int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ;
   int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ;
   //计算选中格的左上角的坐标(象素为单位)
   long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY;
   long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX;
   //计算选中格的尺寸(象素为单位)。加1是实际调试中,发现加1后效果更好
   long width = m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX+1;
   long height = m_FlexGrid.GetRowHeight(lRow)/nTwipsPerDotY+1;
   //形成选中个所在的矩形区域
   CRect rc(x,y,x+width,y+height);
   //转换成相对对话框的坐标
   rc.OffsetRect(rect.left+1,rect.top+1);
   //清空下拉列表的内容
   m_ChangeCombo.ResetContent( );  
   //以下省略哪一列用文本控件,哪一列用下拉列表控件的判断。如果是用下拉列表控件,则会先向下拉列表控件中增加数据,否则为空  
   //获取选中格的文本信息
   CString strValue = m_FlexGrid.GetTextMatrix(lRow,lCol);
   int num = m_ChangeCombo.GetCount();
   //如果下拉列表控件中有数据,则表示使用下拉列表控件来进行数据选择
   if(num!=0)
   {
    m_ChangeCombo.ShowWindow(SW_SHOW);//显示控件
    m_ChangeCombo.MoveWindow(rc); //移动到选中格的位置,覆盖
    m_ChangeCombo.SelectString(-1,strValue); //内容全选。方便直接修改
    m_ChangeCombo.SetFocus(); //获取焦点
    UpdateData(false);
    return;
   }
   //
   m_Change.ShowWindow(SW_SHOW); //显示控件
   m_Change.SetWindowText(strValue); //显示文本
   m_Change.SetFocus(); //获取焦点
   m_Change.SetSel(0,-1); //全选
   m_Change.MoveWindow(rc); //移动到选中格的位置,覆盖
  }
  文本编辑完毕后,回车即将新的文本信息填到选中格中

  void CChartInfoEditDlg::OnKillfocusEditChange()
  {
   UpdateData(true);
   m_FlexGrid.SetText(m_SChange);//设置文本信息
   m_Change.ShowWindow(SW_HIDE); //隐藏文本控件
   UpdateData(false);
  }

  下拉列表编辑完毕后,将新的新息填到选中格中

  void CChartInfoEditDlg::OnKillfocusChangecombo()
  {
   UpdateData(true);
   CString str;
   m_ChangeCombo.GetWindowText(str);
   m_FlexGrid.SetText(str);
   m_ChangeCombo.ShowWindow(SW_HIDE);
   UpdateData(false);
  }

  【总结】这是一个比较简单的程序。如果表格中列较多,属性各有不同,也许大家可以试着用更加复杂的控件来编辑信息。也可以同时做多个文本控件和下拉列表控件,以对应不同列的不同信息要求(比如有的格信息可能又不同的格式要求,那么可以预先做好各种不同风格的控件与之对应)。

 

上下文章:

 

上一篇文章: “QQ尾巴病毒”核心技术的实现 下一篇文章: VC使用ActiveX控件常见问题

相关文章:

  • 教你动用Ps历史画笔美化一个青春美丽动人的MM照片
  • QMAIL+MH设计方案(一)
  • QMAIL+MH设计方案(二)
  • QMAIL+MH设计方案(三)
  • QMAIL+MH设计方案(四)

相关软件:

  • 胜新通用条形码设计打印系统 6.09
  • 冬莲报表设计器 V1.0
  • SmartGrid表格控件(Asp.Net DataGrid, Web Grid) V1.5
  • HiHand结构设计工具箱 2005 Build 0903
  • 创想家居设计软件 V9.5 普及版
  • AutoXlsTable(Excel表格导入AutoCAD) V2.52

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • 深入编程:控制面板知多少?

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有