您现在的位置:计算机技术学习网 > 技术中心 > 编程开发 > C >

做一个可编辑的表格控件

来源:网络收集 责任编辑:栏目编辑 发表时间:2013-07-01 20:14 点击:
【实现内容】做一个可编辑的表格控件。  
  【使用控件】一个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;
    //形成选中个所在的矩形区域
 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1