MFC VC++6.0列表控件的使用
2016-01-02 17:58
591 查看
一、创建
创建列表控件,IDC_LIST1
列表视图控件有4种风格:Icon、Small Icon、List和Report。下面简单说下4种风格各自的特点:
Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。
Small Icon小图标风格:列表项的图标通常为16×16像素,在图标的右面显示标签。
List列表风格:与小图标风格类似,图标和文字的对齐方式不同。
Report报表风格:列表视图控件可以包含一个列表头来描述各列的含义。每行显示一个列表项,通常可以包含多个列表子项。最左边的列表子项的标签左边可以添加一个图标,而它右边的所有子项则只能显示文字。这种风格的列表视图控件很适合做各种报表。
样式 LVS_ICON、LVS_SMALLICON、LVS_LIST 和 LVS_REPORT 指定四种列表控件 (List Control) 视图
二、关联
三、重载,避免闪烁
四、使用
给列表控件插入图标(在程序初始化程序中,对话框应用程序是在)
五、使用过程中避免闪烁
创建列表控件,IDC_LIST1
列表视图控件有4种风格:Icon、Small Icon、List和Report。下面简单说下4种风格各自的特点:
Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。
Small Icon小图标风格:列表项的图标通常为16×16像素,在图标的右面显示标签。
List列表风格:与小图标风格类似,图标和文字的对齐方式不同。
Report报表风格:列表视图控件可以包含一个列表头来描述各列的含义。每行显示一个列表项,通常可以包含多个列表子项。最左边的列表子项的标签左边可以添加一个图标,而它右边的所有子项则只能显示文字。这种风格的列表视图控件很适合做各种报表。
样式 LVS_ICON、LVS_SMALLICON、LVS_LIST 和 LVS_REPORT 指定四种列表控件 (List Control) 视图
二、关联
// Dialog Data //{{AFX_DATA(CShowDlg) enum { IDD = IDD_SHOW_DIALOG }; CTreeCtrl m_tree; CListCtrl m_list;//创建与控件相关联的变量m_List //}}AFX_DATA
三、重载,避免闪烁
CMyListCtrl m_list;//重载类 //MyListCtrl.h代码 class CMyListCtrl : public CListCtrl { // Construction public: CMyListCtrl(); long m_bReDraw; // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMyListCtrl) //}}AFX_VIRTUAL // Implementation public: virtual ~CMyListCtrl(); // Generated message map functions protected: //{{AFX_MSG(CMyListCtrl) afx_msg BOOL OnEraseBkgnd(CDC* pDC);//重载背景擦除函数,避免闪烁 afx_msg void OnPaint();//数据重绘,彻底避免闪烁 //}}AFX_MSG DECLARE_MESSAGE_MAP() };
//MyListCtrl.cpp代码 CMyListCtrl::CMyListCtrl() { } CMyListCtrl::~CMyListCtrl() { } BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl) //{{AFX_MSG_MAP(CMyListCtrl) ON_WM_ERASEBKGND() ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyListCtrl message handlers BOOL CMyListCtrl::OnEraseBkgnd(CDC* pDC) { /* 禁止重绘背景 */ return false; } void CMyListCtrl::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here //使用双缓冲的方法绘制背景 CRect rect; CRect headerRect; CDC MemDC; //内存DC CBitmap MemMap; GetClientRect(&rect); GetDlgItem(0)->GetWindowRect(&headerRect); MemDC.CreateCompatibleDC(&dc); MemMap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); MemDC.SelectObject(&MemMap); MemDC.FillSolidRect(&rect,GetBkColor()); //调用默认的OnPaint(),把图形画在内存DC表上 DefWindowProc(WM_PAINT,(WPARAM)MemDC.m_hDC,(LPARAM)0); //输出到显示设备 dc.BitBlt(0, headerRect.Height(), rect.Width(), rect.Height(), &MemDC, 0, headerRect.Height(), SRCCOPY); MemDC.DeleteDC(); MemMap.DeleteObject(); // Do not call CListCtrl::OnPaint() for painting messages //AfxMessageBox("Here"); }
四、使用
m_list.SetItemCount(100);//设置行的数目,当大批量插入数据时,必须提前说明行数 m_list.InsertColumn(0,"序号",LVCFMT_CENTER,100);//插入第一列表头 m_list.InsertColumn(1,"id",LVCFMT_CENTER,100);//插入第二列表头 m_list.InsertColumn(2,"长度",LVCFMT_CENTER,100);//插入第三列表头 m_list.InsertColumn(3,"数据",LVCFMT_CENTER,300);//插入第四列表头 m_list.InsertColumn(4,"时间",LVCFMT_CENTER,100);//插入第五列表头 m_list.InsertColumn(5,"接收帧数",LVCFMT_CENTER,100);//插入第六列表头 m_list.InsertColumn(6,"总线百分比",LVCFMT_CENTER,100);//插入第七列表头 m_list.InsertColumn(7,"报文发送周期",LVCFMT_CENTER,100);//插入第八列表头 m_list.InsertItem(0,"第一行",0);//插入第一行,显示第一个图标 m_list.InsertItem(1,"第二行",1);//插入第二行,显示第二个图标 m_list.InsertItem(2,"第三行",2);//插入第三行,显示第一个图标 m_list.SetItemText(0,2,"在第一行第三列插入数据");//插入第三列数据 m_list.SetCheck(0,true);//选中第一行,使得选中框处于打勾状态 m_list.SetBkColor(RGB(200,150,200)); //设置列背景色 m_list.SetTextBkColor(RGB(200,150,200));//设置文本背景色 m_list.SetTextColor(RGB(250,0,0));//设置文本颜色 #define LVS_EX_DOUBLEBUFFER 0x00010000 m_list.SetExtendedStyle(m_list.GetExtendedStyle()| LVS_EX_CHECKBOXES|//显示选中图标 LVS_EX_DOUBLEBUFFER| LVS_EX_FULLROWSELECT | //具有整行选中时变色 LVS_EX_GRIDLINES |//显示网格线 LVS_EX_FLATSB);//伸缩条变色辅助功能
给列表控件插入图标(在程序初始化程序中,对话框应用程序是在)
//头文件中声明变量 CImageList m_pImageList ; HICON hicon1; HICON hicon2;
//BOOL CShowDlg::OnInitDialog() m_pImageList.Create(16, 16, ILC_COLOR4|ILC_MASK, 2, 2);//创建图像列表,ILC_MASK将图标背景设置为透明 //图像列表一般为[16,16]小图标,[32,32],[48,48]可作为大图标使用 //m_pImageList.SetBkColor(RGB(255, 255, 255)); hicon1=AfxGetApp()->LoadIcon(IDI_ICON1); hicon2=AfxGetApp()->LoadIcon(IDI_ICON2); m_pImageList.Add(hicon1); m_pImageList.Add(hicon2); //初始化列表视 m_list.SetImageList(&m_pImageList,LVSIL_SMALL);
五、使用过程中避免闪烁
//m_list.LockWindowUpdate(); m_list.SetRedraw(false);//禁止本listbox刷新。 //插入数据 //m_list.UnlockWindowUpdate(); //m_list.Invalidate(); //m_list.UpdateWindow(); m_list.SetRedraw(true);//允许本listbox刷新。
相关文章推荐
- C++对象在内存中的存储
- 黑马程序员-C语言-小知识点集
- C语言基础之内存分配
- 观察者模式
- C++中导致二义性错误
- C++命名空间
- C/C++数据对齐方式
- 黑马程序员-C语言-数组名作为函数参数
- 手把手教你学单片机--51单片机C语言开发
- Turbo C++ 3.0创建多文件项目的方法
- 利用C++11实现一个自动注册的工厂
- C++小题(八)
- 手把手教你学单片机--51单片机C语言开发
- C语言实现程序开机自启动
- C++中的const和constexpr详解
- c语言:模拟实现strstr库函数
- 关于C++的const
- C语言怎么获得进程的PE文件信息
- NULL和NUL
- C语言读取PE文件信息(一)