MFC VC++6.0列表控件的使用

本文介绍了MFC VC++6.0中列表控件IDC_LIST1的创建与使用,详细讲解了Icon、Small Icon、List和Report四种风格的特点,以及如何设置和避免闪烁问题,还提到了如何插入图标和实际应用中的注意事项。

一、创建
创建列表控件,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刷新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值