MFC 对话框动态创建简单的GridCtrl控件
1.下载安装GridCtrl===>http://www.codeproject.com/Articles/8/MFC-Grid-control
在对应项目里面添加GridCtrl的所有.h和cpp的文件(GridCtrl_src和NewCellTypes两个文件夹下的文件)
在vs2010中可能会出现CMemDC重定义的错误,只要将CMemDC这个重命名为CGridMemDC(或者其他你想要的名字,同时将这个库中的其他引用CMemDC这个类的地方的名称一起改过来)
2.在对话框中添加GridCtrl的成员变量
定义:
1 | CGridCtrl* m_pGrid; |
构造函数中初始化:
1 | m_pGrid=NULL; |
析构函数中销毁
1 | if (m_pGrid) |
3.在对话框中画出m_pGrid控件
1 | CRect rect; |
其中Create的第一个参数是这个控件在对话框中的位置(我这里是在对话框底部高为100的区域),第二个参数是父窗口句柄,第三个是你分配给他的ID。
这个创建过程,可以根据需求在不同的函数中实现。
这一过程结束之后我们就有了一个空白的GridCtrl控件显示在对话框中了。
4.构建简单的表格
1 | m_pGrid->SetEditable(true);//默认就是可以编辑的 |
这一步结束之后就是一个8*8的表格,但是表格和表头都还没有内容是空白的
5.操作单元格
可以直接设置对应的单元格的内容
1 | m_pGrid->SetItemText(row,col,content); |
也可以通过下面方式来设置
1 | GV_ITEM Item; |
其中mask表明的是能够访问的单元格的内容,比如我这个地方设置成了GVIF_IMAGE,那么运行结果出来之后在对应的单元格中是看不到content的,而且程序中通过GetItemText()的方法也访问不了(其实就是这个单元格的类型,通过虽然赋值没有报错,但是即便重新设置了mask的值为GVIF_IMAGE,也获取不到之前的赋值)。
mask的类型有下面几种:
1 | GVIF_TEXT // Cell text will be accessed |
到此一个简单的GridCtrl的创建就完成了。
6.添加消息响应函数
以添加完成编辑触发的事件处理函数为例,首先在.h文件中声明消息处理函数:
1 | afx_msg void OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult); |
然后到对应的cpp文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息响应映射:
1 | ON_NOTIFY(GVN_ENDLABELEDIT, IDC_GRID, OnGridEndEdit) |
其中第一个参数是消息,第二个是GRID创建时候的ID,第三个参数就是对应的消息处理函数
最后在cpp中编写对应的响应函数:
1 | void C3TranformerAttr::OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult){ |
在这个函数中可以获得相应的行号和列号,从而进行各种操作。