龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用VC++设计一个可编辑的表格控件(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//计算选中格的左上角的坐标(象素为单位) long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY; long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX; //计算选中格的尺寸(象素为单

 //计算选中格的左上角的坐标(象素为单位)

 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);
}

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

精彩图集

赞助商链接