• 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);
        
        m_FlexGrid.put_GridColor(0xffffff);
        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(0XDFBFA2);
                    m_FlexGrid.put_CellForeColor(0xff);
                    
                }
                else
                {
                    m_FlexGrid.put_CellBackColor(0XDFBF52);
                    m_FlexGrid.put_CellForeColor(0x0000ff);
                }
            }
        }
        m_FlexGrid.put_FixedRows(1);          //设置固定行数为1行
        m_FlexGrid.put_FixedCols(0);           //设置固定列数为0列
        
        m_FlexGrid.put_BackColorFixed(0XDFBFA2);        //设置固定行列颜色
        m_FlexGrid.put_ForeColorFixed(0x00ffff);
    }
     
    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);
    }
    
    
    
     
  • 相关阅读:
    spring源码解析-ApplicationContext解析
    分布式系统的CAP理论
    Java常用设计模式详解1--单例模式
    mysql全方位知识大盘点
    重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
    知否知否,VS Code 不止开源
    webpack静态资源拷贝插件
    webpack 清理旧打包资源插件
    webpack 配置分离css插件
    webpack打包指定HTML的文件并引入指定的chunks
  • 原文地址:https://www.cnblogs.com/profession/p/11636702.html
Copyright © 2020-2023  润新知