VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 919|回复: 5

如何用在istCtrlEx(不是ListCtrl)的某行某列中画出图像

[复制链接]
90_avatar_middle
最佳答案
0 
在线会员 发表于 2016-12-12 14:35:14 | 显示全部楼层 |阅读模式
3驿站币
麻烦大家问下,最近在用ListCtrlEx(工作需要,必须用这个类),应该是从ListCtrl派生出来的吧。谁能给个例子,告诉我如何利用ListCtrlEx在列表中确定的某一行某一列上用位图或者图标画出一个图像呢?http://www.cnblogs.com/dlbrant/archive/2009/02/17/1392597.html是网上提供的源代码。我把源代码中ListCtrlExDemoDlg.cpp中的OnInitialDialog做了修改,并且添加了函数InsertPic,具体内容大家可以查看下面的代码,编译环境是vs2010。但是始终画不出图像,是我的代码有问题么?不知道怎么回事?请大家帮我看一下。谢谢

声明的全局变量:
ListCtrlEx::CListCtrlEx m_list;
CImageList m_imList;

BOOL CListCtrlExDemoDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Add "About..." menu item to system menu.

        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                CString strAboutMenu;
                strAboutMenu.LoadString(IDS_ABOUTBOX);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }
       
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon

        m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
        m_list.SetExtendedStyle(m_list.GetExtendedStyle() |LVS_EX_FULLROWSELECT );
       
       
        InsertPicAndWord();

        return TRUE;  // return TRUE  unless you set the focus to a control
}

void CListCtrlExDemoDlg::InsertPic()
{
        m_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS);
        m_list.SetExtendedStyle(m_list.GetExtendedStyle() );

        DWORD dwStyle;
        dwStyle = m_list.GetExtendedStyle();  
        dwStyle = dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES ;
        m_list.SetExtendedStyle(dwStyle);   
       
        AddImages();
       
        // 向¨°列¢D表à¨a视o¨&#174;图a?控?件tInsertColumn插?入¨?3列¢D数oy据Y
        CRect mRect;
        m_list.GetWindowRect(&mRect);                     // 获?取¨?控?件t矩?形?区?域&#174;¨°
        int length = mRect.Width();

        m_list.InsertColumn(0,L"用&#174;?户&#161;ì头a&#161;¤像?",length / 4,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
        m_list.InsertColumn(1,L"用&#174;?户&#161;ì名?",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
        m_list.InsertColumn(2,L"QQ格?言?",length / 8,ListCtrlEx::Normal,LVCFMT_CENTER,ListCtrlEx::SortByString,-1);
       
        int nRow;

        for(int lsn=0;lsn<20;lsn++)
        {
                CString csn=_T("");
                csn.Format(_T("%d"),lsn+1);

                LVITEM lvItem={0};
                lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE;   // 文?字á?、&#161;é图a?片?、&#161;é状á&#161;&#228;态&#172;?
                lvItem.iItem = lsn;                                // 行D号?(第ì¨2三¨y行D)
                lvItem.iImage = 2;                               // 图a?片?索&#161;&#194;引°y号?(第ì¨2三¨y幅¤¨′图a?片? IDB_BITMAP3)
                lvItem.iSubItem = 0;                             // 子á¨&#174;列¢D号?
                nRow = m_list.InsertItem(&lvItem);      
                m_list.SetItemText(nRow,1,csn);   
                m_list.SetItemText(nRow,2,_T("Eastmount制?作á&#161;&#194;"));
        }
        return;

}

void CListCtrlExDemoDlg::AddImages()
{
        // 载?入¨?64*64像?素? 24位?真?彩¨o(ILC_COLOR24)图a?片?
        m_imList.Create(14,14,ILC_COLOR24,10,20);    // 创&#228;&#161;&#228;建&#161;§图a?像?序¨°列¢DCImageList对?象¨&#174;
        CBitmap * pBmp = NULL;
        pBmp = new CBitmap();
        pBmp->LoadBitmap(IDB_BITMAP1);              // 载?入¨?位?图a?IDB_BITMAP1
       
        m_imList.Add(pBmp,RGB(0,0,0));  
        delete pBmp;  
        //
        pBmp = new CBitmap();  
    pBmp->LoadBitmap(IDB_BITMAP2);
       
    m_imList.Add(pBmp,RGB(0,0,0));  
    delete pBmp;
        //
        pBmp = new CBitmap();  
    pBmp->LoadBitmap(IDB_BITMAP3);
       
    m_imList.Add(pBmp,RGB(0,0,0));  
    delete pBmp;

        // 设|¨¨置?CImageList图a?像?列¢D表à¨a与&#174;?CListCtrl控?件t关?联¢a LVSIL_SMALL小?图a?标à¨o列¢D表à¨a
        m_list.SetImageList(&m_imList,LVSIL_SMALL);
       
}





上一篇:使用C++ 设置打印机“高级”选项
下一篇:远程注入VC6正常,VS2008就不行
51_avatar_middle
最佳答案
11 
online_admins 发表于 2016-12-12 16:17:53 | 显示全部楼层
我的建议是直接到 codeproject 上面再找个开源的 ListCtrl 控件类,不仅包含 ListCtrlEx 的所有功能外,还包括向其中的某个单元格插入图像的功能,这样岂不是更好?
90_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2016-12-12 17:02:06 | 显示全部楼层
Syc 发表于 2016-12-12 16:17
我的建议是直接到 codeproject 上面再找个开源的 ListCtrl 控件类,不仅包含 ListCtrlEx 的所有功能外,还 ...

谢谢您的回复,请问,您能说的再确切一些,比方说,哪个版本功能比较完善么?
51_avatar_middle
最佳答案
11 
online_admins 发表于 2016-12-12 17:17:01 | 显示全部楼层
tpjk 发表于 2016-12-12 17:02
谢谢您的回复,请问,您能说的再确切一些,比方说,哪个版本功能比较完善么?

https://www.codeproject.com/KB/list/
这里面有很多

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
90_avatar_small tpjk + 1 + 1 赞一个!

查看全部评分

90_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2016-12-12 17:53:08 | 显示全部楼层
Syc 发表于 2016-12-12 17:17
https://www.codeproject.com/KB/list/
这里面有很多

谢谢,我先去看一下。但是可能还要用ListCtrlEx,因为工程里用的就是这个控件,如果更换其它控件,代价可能会比较大
75_avatar_middle
最佳答案
0 
在线会员 发表于 2016-12-15 21:56:16 | 显示全部楼层
sssssssssssssssssssssssssss
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-12-10 19:38

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表