您的位置:首页 > 其它

MFC中CListCtrl控件的静态与动态创建的实例分析

2014-06-29 13:13 495 查看
在使用MFC编程的时候,CListCtrl控件是非常有用的一种控件,和很多的资源一样,我们都可以借助MFC提供给我们的图形界面编辑器的"所见即所得“的设计方法来静态创建CListCtrl,也可以使用代码直接创建我们想要的控件,这种方式更加灵活。

一.静态创建CListCtrl

(1)使用图形编辑器创建CListCtrl



我们可以通过图形编辑器给这个控件设置属性,打开属性框:



(2)给创建的这个空间绑定对应的CListCtrl类的对象



使用向导添加后,可以看到这个控件的父窗口(即所在对话框)的类中多了一这个空间的定义:



我们给这个对象命名为m_bookInfoListCtrl,这样通过这个对象我们就可以操作这个控件了。

(3)使用代码操作这个控件

我们可以在这个空间所在的对话框在调用初始化函数的时候让这个控件就显示出来,那么当对话框创建的时候就可以看到这个控件了。

//获取及设置扩展风格
DWORD dwStyle = m_bookInfoListCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
m_bookInfoListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格

// 添加控件内容
m_bookInfoListCtrl.InsertColumn( 0 , "编号" , LVCFMT_LEFT , 100 ) ;
m_bookInfoListCtrl.InsertColumn( 1 , "名称" , LVCFMT_LEFT , 200 ) ;
m_bookInfoListCtrl.InsertColumn( 2 , "类型" , LVCFMT_LEFT , 150 ) ;
m_bookInfoListCtrl.InsertColumn( 3 , "价格" , LVCFMT_LEFT , 100 ) ;


因为对于CListCtrl的操作太多,所以这里之列举了创建这个控件的一些方法,其他的操作需要专门的一篇博客来总结。
这段代码运行后的效果如下:



二.动态创建CListCtrl

有时候我们需要动态的创建这个CListCtrl,并不想要其一直存在,可以通过创建让其显式,通过释放让其消失,这样我们就需要动态创建了。

动态创建的话,那么晚我们就不需要使用图形编辑器了,直接使用Create即可。

先直接上代码:

CRect rect ;
GetClientRect( &rect ) ;

m_pOrderInfoListCtrl = new CListCtrl ;
int nRet = m_pOrderInfoListCtrl->Create( WS_BORDER|LVS_REPORT|LVS_ALIGNLEFT , rect , this, 0x285);

//获取及设置风格
LONG lStyle;
lStyle = GetWindowLong(m_pOrderInfoListCtrl->m_hWnd, GWL_STYLE); //获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_pOrderInfoListCtrl->m_hWnd, GWL_STYLE, lStyle); //设置style
m_pOrderInfoListCtrl->ShowWindow( SW_SHOW ) ;

//获取及设置扩展风格
DWORD dwStyle = m_pOrderInfoListCtrl->GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
m_pOrderInfoListCtrl->SetExtendedStyle(dwStyle); //设置扩展风格

// 添加控件内容
m_pOrderInfoListCtrl->InsertColumn( 0 , "订单编号" , LVCFMT_LEFT , 100 ) ;
m_pOrderInfoListCtrl->InsertColumn( 1 , "购买者ID" , LVCFMT_LEFT , 100 ) ;
m_pOrderInfoListCtrl->InsertColumn( 2 , "购买者姓名" , LVCFMT_LEFT , 100 ) ;
m_pOrderInfoListCtrl->InsertColumn( 3 , "书的编号" , LVCFMT_LEFT , 100 ) ;
m_pOrderInfoListCtrl->InsertColumn( 4 , "书名" , LVCFMT_LEFT , 100 ) ;
m_pOrderInfoListCtrl->InsertColumn( 5 , "价格" , LVCFMT_LEFT , 50 ) ;


实际上我们的操作都是一样的,都是设置属性,添加控件的内容,只是这里多了创建控件的代码。在静态创建中我们使用图形编辑器代替了。
动态创建我们需要首先定义一个CListCtrl的变量,一般都是通过动态创建,动态释放的,因为这样的话我们可以自己控制这个控件的生存周期而不使其依赖于函数的作用域。

在例子中,我自己在对话框类中定义了指向对象的指针,并在在OnMenuListAllOrdersInfo函数中操作这个控件。



最后的效果是:





动态创建的好处就是,我们可以销毁当前覆盖对话框的控件资源,再创建我们想要的空间资源,例如,我现在销毁当前这个控件的资源(一定要使用new来彻底销毁,要不然只是被覆盖了而不是销毁),再创建另一个控件。



动态创建的对象要注意,”对象亡则资源亡“,所以一定要注意创建的对象的生命周期。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: