VC++ CMsflexgrid 使用

引用actvie x :microsoft CMsflexgrid;

BOOL CCalibrationCoordsDisDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_FlexGrid.put_Rows(1000);                //设置列数
    m_FlexGrid.put_Cols(10);                 //设置行数
    m_FlexGrid.put_FixedRows(1);         //设置固定行数为1行
    m_FlexGrid.put_FixedCols(0);          //设置固定列数为0列
    m_FlexGrid.put_ColWidth(1, 1500);        //设置列号为1的列宽为1500
    m_FlexGrid.put_RowHeight(2, 600);       //设置行号为2的行高为300
    m_FlexGrid.put_ColAlignment(1, 4);        //设置列号为1的文本对齐方式
    m_FlexGrid.put_TextArray(0, "Head1");                 //设置表头(第1列)内容为“Head1”
    m_FlexGrid.put_TextArray(1, "Head2");
    m_FlexGrid.put_TextMatrix(1, 1, "Text");                //设置单元格(行号1列号1)内容为“Text”
    m_FlexGrid.AddItem("AddString", (COleVariant)(3L));           //在行号为3的位置增加一行
    for (int i = 0; i<4; i++)
            m_FlexGrid.put_TextMatrix(0, i, "合并行");        //将行号为0、列号从0到4的单元格内容设为相同“合计”
    m_FlexGrid.put_MergeCells(2);                           //设置单元格合并方式(下述)
    m_FlexGrid.put_MergeRow(0, TRUE);                 //设置要合并的行
      

    for (int i = 4; i<7; i++)
        m_FlexGrid.put_TextMatrix(i,2, "合并列");        //将列号为2、列号从4到7的单元格内容设为相同“合计”
    m_FlexGrid.put_MergeCells(3);                           //设置单元格合并方式(下述)
    m_FlexGrid.put_MergeCol(2, TRUE);
    
    for (int row = 0; row < 10; row++)
    {
        m_FlexGrid.put_FixedRows(row);          //设置固定行数为1行
        for (int i = 0; i < 10; i++)
        {
            m_FlexGrid.put_FixedCols(i);           //设置固定列数为0列
            if (row % 2)
            {
                m_FlexGrid.put_CellBackColor(0x80ff);
                m_FlexGrid.put_CellForeColor(125);
            }
            else
            {
                m_FlexGrid.put_CellBackColor(0xff00);
                m_FlexGrid.put_CellForeColor(125);
            }
        }
    }
    m_FlexGrid.put_FixedRows(1);          //设置固定行数为1行
    m_FlexGrid.put_FixedCols(0);           //设置固定列数为0列
    m_FlexGrid.put_BackColorFixed(125);        //设置固定行列颜色
    m_FlexGrid.put_ForeColorFixed(200);
}


知识兔
void CCalibrationCoordsDisDlg::ClickMsflexgrid1(){    long lCol = m_FlexGrid.get_ColSel();         //获取点击的行号    long lRow = m_FlexGrid.get_RowSel();      //获取点击的列号    if (lRow>m_FlexGrid.get_Rows() || lRow == 0)              //判断点击是否有效        return;    CRect rect;    m_FlexGrid.GetWindowRect(&rect);                 //获取FlexGrid控件的窗口矩形    ScreenToClient(&rect);                                    //转换为客户区矩形    CDC* pDC = GetDC();    int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX);    int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY);    /*long y = m_FlexGrid.get_RowPos(lRow) / nTwipsPerDotY;    long x = m_FlexGrid.get_ColPos(lCol) / nTwipsPerDotX;*/    long x = 0, y = 0;    for (int col = 0; col < lCol; col++)    {        x += m_FlexGrid.get_ColWidth(col)/ nTwipsPerDotX;    }    y = m_FlexGrid.get_RowPos(lRow) / nTwipsPerDotY;    //计算选中格的尺寸(象素为单位)。加1是实际调试中,发现加1后效果更好    long width = m_FlexGrid.get_ColWidth(lCol) / nTwipsPerDotX + 1;    long height = m_FlexGrid.get_CellHeight() / nTwipsPerDotY + 2;    //形成选中个所在的矩形区域    CRect rc(x, y, x + width, y + height);    //转换成相对对话框的坐标    rc.OffsetRect(rect.left + 1, rect.top + 1);    CString strValue = m_FlexGrid.get_TextMatrix(lRow, lCol);           //获取单元格内容    m_Edit.ShowWindow(SW_SHOW);                         //显示控件    m_Edit.MoveWindow(rc);                                        //改变大小并移到选中格位置    m_Edit.SetWindowText(strValue);                           //显示文本    m_Edit.SetSel(0, strValue.GetLength());    m_Edit.SetFocus();}void CCalibrationCoordsDisDlg::OnEnKillfocusEdit1(){    CString strInput;    GetDlgItemText(IDC_EDIT1, strInput);      //获取输入框内容    m_FlexGrid.put_Text(strInput);                   //设置单元格内容    m_Edit.ShowWindow(SW_HIDE);}
 
计算机