zoukankan      html  css  js  c++  java
  • MFC 对话框动态创建简单的GridCtrl控件

    https://xtestw.com/2014/08/27/MFC%20%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8A%A8%E6%80%81%E5%88%9B%E5%BB%BA%E7%AE%80%E5%8D%95%E7%9A%84GridCtrl%E6%8E%A7%E4%BB%B6/#more

    1.下载安装GridCtrl===>http://www.codeproject.com/Articles/8/MFC-Grid-control

            在对应项目里面添加GridCtrl的所有.h和cpp的文件(GridCtrl_src和NewCellTypes两个文件夹下的文件)

            在vs2010中可能会出现CMemDC重定义的错误,只要将CMemDC这个重命名为CGridMemDC(或者其他你想要的名字,同时将这个库中的其他引用CMemDC这个类的地方的名称一起改过来)

    2.在对话框中添加GridCtrl的成员变量

        定义:

    CGridCtrl* m_pGrid;

        构造函数中初始化:

    m_pGrid=NULL;

        析构函数中销毁

    if (m_pGrid)
    {
        delete m_pGrid;
        m_pGrid=NULL;
    }

    3.在对话框中画出m_pGrid控件

    CRect rect;
    this->GetWindowRect(rect);
    GetClientRect(rect);
    m_pGrid=new CGridCtrl();
    m_pGrid->Create(CRect(rect.TopLeft().x,rect.BottomRight().y-100,rect.Width(),rect.BottomRight().y),this,1000);

    其中Create的第一个参数是这个控件在对话框中的位置(我这里是在对话框底部高为100的区域),第二个参数是父窗口句柄,第三个是你分配给他的ID。

    这个创建过程,可以根据需求在不同的函数中实现。

    这一过程结束之后我们就有了一个空白的GridCtrl控件显示在对话框中了。

    4.构建简单的表格

    m_pGrid->SetEditable(true);//默认就是可以编辑的
    // m_pGrid->SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));//设置表格内容是黄色背景
    m_pGrid->SetRowCount(8); //初始为8行,包含表头
    m_pGrid->SetColumnCount(8); //初始化为8列
    m_pGrid->SetFixedRowCount(1); //表头为一行
    m_pGrid->SetFixedColumnCount(1); //表头为一列

    这一步结束之后就是一个8*8的表格,但是表格和表头都还没有内容是空白的

    5.操作单元格

    可以直接设置对应的单元格的内容

    m_pGrid->SetItemText(row,col,content);

    也可以通过下面方式来设置

    GV_ITEM Item;
    Item.mask = GVIF_TEXT;
    Item.row = row;
    Item.col = col;
    Item.strText = “content";
    m_Grid.SetItem(&Item);

    其中mask表明的是能够访问的单元格的内容,比如我这个地方设置成了GVIF_IMAGE,那么运行结果出来之后在对应的单元格中是看不到content的,而且程序中通过GetItemText()的方法也访问不了(其实就是这个单元格的类型,通过虽然赋值没有报错,但是即便重新设置了mask的值为GVIF_IMAGE,也获取不到之前的赋值)。

    mask的类型有下面几种:

    GVIF_TEXT      // Cell text will be accessed
    GVIF_IMAGE     // Cell image number will be accessed
    GVIF_PARAM     // Cell user data (lParam) will be accessed
    GVIF_STATE     // Cell state will be accessed
    GVIF_BKCLR     // Cell background colour will be accessed
    GVIF_FGCLR     // Cell foreground colour will be accessed
    GVIF_FORMAT    // Cell format field will be accessed
    GVIF_FONT      // Cell logical font will be accessed
    GVIF_MARGIN    // Cell margin information will be accessed 
    GVIF_ALL       // All information will be accessed

    到此一个简单的GridCtrl的创建就完成了。

    6.添加消息响应函数

    以添加完成编辑触发的事件处理函数为例,首先在.h文件中声明消息处理函数:

    afx_msg void OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult);

    然后到对应的cpp文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息响应映射:

    ON_NOTIFY(GVN_ENDLABELEDIT, IDC_GRID, OnGridEndEdit)

    其中第一个参数是消息,第二个是GRID创建时候的ID,第三个参数就是对应的消息处理函数

    最后在cpp中编写对应的响应函数:

    void C3TranformerAttr::OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult){
         NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
         pItem->iColumn;
         pItem->iRow;
    }

    在这个函数中可以获得相应的行号和列号,从而进行各种操作。

     
     
  • 相关阅读:
    使用element-ui是下拉筛选选择
    vue 组件传值
    vue element 地址联动的使用
    vux scroller
    实时监听组件中路由的变化
    vuex的使用
    对移动端滚动高度的获取
    【转】ACM 取石子问题
    【转】ACM博弈知识汇总
    EOJ 2857 编辑距离
  • 原文地址:https://www.cnblogs.com/xtestw/p/3940473.html
Copyright © 2011-2022 走看看