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

猜你喜欢

转载自www.cnblogs.com/profession/p/11636702.html