MSFlexGrid基本使用_msflexgrid使用方法
MSFlexGrid基本使用由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“msflexgrid使用方法”。
1.给FlexGrid控件绑定成员变量:m_FlexGrid。
2.设置行列数
m_FlexGrid.SetCols(4);//设置列数
m_FlexGrid.SetRows(6);//设置行数
3.设置固定行数和固定列数
m_FlexGrid.SetFixedRows(1);//设置固定行数为1行
m_FlexGrid.SetFixedCols(0);//设置固定列数为0列
4.设置列宽、行高
m_FlexGrid.SetColWidth(1,1500);//设置列号为1的列宽为1500
m_FlexGrid.SetRowHeight(2,300);//设置行号为2的行高为300
5.设置文本对齐方式
m_FlexGrid.SetColAlignment(1,4);//设置列号为1的文本对齐方式
参数对应描述为:
0单元内容顶部左对齐。
1单元内容中间左对齐。对字符串的缺省设置值。
2单元内容底部左对齐。
3单元内容顶部居中。
4单元内容中间居中。
5单元内容底部居中。
6单元内容顶部右对齐。
7单元内容中间右对齐。对数字的缺省设置值。
8单元内容底部右对齐。
9单元内容一般对齐方式。对字符串中间左对齐而对数值中间右对齐。
6.设置表头和单元格内容
m_FlexGrid.SetTextArray(0,“Head1”);//设置表头(第1列)内容为“Head1”
m_FlexGrid.SetTextMatrix(1,1,“Text”);//设置单元格(行号1列号1)内容为“Text”
7.增加一行
m_FlexGrid.AddItem(“AddString”,(COleVariant)(3L));//在行号为3的位置增加一行
8.合并单元格
for(i=0;i
m_FlexGrid.SetTextMatrix(5,i,“合计”);//将行号为
5、列号从0到4的单元格内容设为相同“合计”
m_FlexGrid.SetMergeCells(2);//设置单元格合并方式(下述)m_FlexGrid.SetMergeRow(5,TRUE);//设置要合并的行
SetMergeCells函数的参数值如下:
0: flexMergeNever默认的选项,就是不合并
1: flexMergeFree不规则的合并
2: flexMergeRestrictRows行合并
3: flexMergeRestrictColumns列合并
4: flexMergeRestrictBoth行,列都合并
注意只有单元格内容相同时才能进行合并操作。
9.制作可编辑的FlexGrid控件
放置一个Edit控件,绑定成员变量为m_Edit,并设置初始状态为不可见。
响应FlexGrid控件的Click事件:
void CBlackBKDlg::OnClickMsflexgrid()
{
long lCol=m_FlexGrid.GetColSel();//获取点击的行号
long lRow=m_FlexGrid.GetRowSel();//获取点击的列号
if(lRow>m_FlexGrid.GetRows()|| lRow==0)//判断点击是否有效return;
CRectrect;
m_FlexGrid.GetWindowRect(&rect);//获取FlexGrid控件的窗口矩形ScreenToClient(&rect);//转换为客户区矩形
CDC* pDC=GetDC();
//MSFlexGrid控件的函数的长度单位是“缇(twips)”,需要将其转化为像素,1440 缇 = 1 英寸
//计算象素点和缇的转换比例
intnTwipsPerDotX=1440/pDC->GetDeviceCaps(LOGPIXELSX);
intnTwipsPerDotY=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;
//形成选中个所在的矩形区域
CRectrc(x,y,x+width,y+height);
//转换成相对对话框的坐标
rc.OffsetRect(rect.left+1,rect.top+1);
CStringstrValue=m_FlexGrid.GetTextMatrix(lRow,lCol);//获取单元格内容
m_Edit.ShowWindow(SW_SHOW);//显示控件
m_Edit.MoveWindow(rc);//改变大小并移到选中格位置m_Edit.SetWindowText(strValue);//显示文本
m_Edit.SetFocus();//获取焦点
}
编辑完成释放焦点之后,将数据写回单元格。响应Edit控件的EN_KILLFOCUS事件:void CBlackBKDlg::OnKillfocusEditChange()
{
CStringstrInput;
GetDlgItemText(IDC_EDIT_CHANGE,strInput);//获取输入框内容
m_FlexGrid.SetText(strInput);//设置单元格内容
m_Edit.ShowWindow(SW_HIDE);//隐藏输入框