【程序编程相关:线程学习笔记(2)-互斥对象 】
【推荐阅读: 结合ADO、ADOX和MFC的文档/视】【扩展信息:Visual C++编程疑难问题解(一)】
一. 概述在我们制作的用户界面中很多时候会用到表格,当然我们首先想到的是用控件,如msflexgrid.我们可以方便的调用控件自身的函数来对表格中的元素进行操作,但是如果要设计一个可以编辑的表格,我们该怎么办呢?事实上这种可编辑表格的应用还真的不少,主要是其用户操作的交互性较好.笔者在前一阶段开发项目时遇到了这个问题,以下介绍笔者的实现方案.二. 可编辑表格的初步实现1. 创建新类cctrleditgrid首先创建一个单文档工程editgrid.接着在工程中加入msflexgrid控件.这是个activex控件,选择addtoproject的components and controls gallery选项可加入该控件.然后以msflexgrid为基类创建新类cctrleditgrid,并添加成员函数void initgrid()(该函数目前只是空的)与成员变量 cedit* m_pedit; cspinbuttonctrl* m_pspinbuttonctrl;以后表格的实体类就是该类.2. 在工程文件的视图类中显示表格首先在视图类ceditgridview中添加成员变量cctrleditgrid* m_pctrleditgrid.接着添加ceditgridview的消息相应函数oncreate,在其中创建表格m_pctrleditgrid = new cctrleditgrid;m_pctrleditgrid->create(null,ws_child|ws_visible,crect(0,0,0,0),this,id_editgrid); m_pctrleditgrid->initgrid ( ); 然后为了与视图的大小保持一致在ceditgridview的消息相应函数onsize中添加代码 if ( m_pctrleditgrid != null ) m_pctrleditgrid->movewindow(0,0,cx,cy);3. 实现cctrleditgrid的initgrid的函数initgrid完成表格的属性设置,表格初始内容的填写,可编辑控件的创建.这里的可编辑控件如cedit,ccombobox,cspinbuttonctrl,cdatetimectrl…….在本例中只使用cedit与csinbuttonctrl的结合这一种.如果表格中不同列之间的编辑控件不同,在程序中可以通过检测列号,来决定使用什么控件,事实上在笔者的项目中不同列之间也是使用不同编辑控件的.在此用一种控件来说明表格编辑的实现方法,读者想换其他的控件也很容易了.void cctrleditgrid::initgrid(){ //设置行数,列数 setcols( col_initnumber ); ... 下一页