Customizing CListCtrl...
DIGITAL SURF -- 100343.1477@CompuServe.COM Tuesday, July 30, 1996 Environment : Visual C++ 4.1, Win 95 I am using a CListCtrl to display some results. The list is used in the LVS_REPORT mode because I want to use some columns. I also want to add bitmaps before the text of each item. The problem is that I MUST display 64*64 bitmaps. I'd like to know if I can use a CImageList to do that. Any help will be appreciated. Thanks in advance Nicolas RAMPONI DIGITAL SURF
Mike Blaszczak -- mikeblas@nwlink.com Saturday, August 03, 1996 At 01:35 AM 7/30/96 EDT, DIGITAL SURF wrote: >Environment : Visual C++ 4.1, Win 95 >I am using a CListCtrl to display some results. The list is used in the >LVS_REPORT mode because I want to use some columns. I also want to add bitmaps >before the text of each item. The problem is that I MUST display 64*64 bitmaps. >I'd like to know if I can use a CImageList to do that. You can't, inherently. List controls can only directly support small icons, large icons, or state images. None of these image types are 64x64 pixels in size. Your only alternative would be to make an owner-draw fixed image list. You can investigate the ROWLIST sample to get started with that. >Thanks in advance Buy me some new tennis racquets. Thanks in advance. .B ekiM http://www.nwlink.com/~mikeblas/ These words are my own. I do not speak on behalf of Microsoft.
ppbillc@srv2.sj.ablecom.net Tuesday, August 06, 1996 >I am using a CListCtrl to display some results. The list is used in the >LVS_REPORT mode because I want to use some columns. I also want to add bitmaps >before the text of each item. The problem is that I MUST display 64*64 bitmaps. >I'd like to know if I can use a CImageList to do that. -You can't, inherently. List controls can only directly support small icons, -large icons, or state images. None of these image types are 64x64 pixels in -size. hmm why wont this work? CImageList *il = new CImageList(); il->Create(64,64,TRUE,1,1); il->Add( CBitmap* pbmImage, COLORREF crMask ); where CBitmap is a 64x64 16 color bitmap Anyone for tennis? B / \ * * \ _,-._/
Mike Blaszczak -- mikeblas@nwlink.com Friday, August 09, 1996 At 02:52 PM 8/6/96 +0000, you wrote: > >>I am using a CListCtrl to display some results. The list is used in the >>LVS_REPORT mode because I want to use some columns. I also want to add bitmaps >>before the text of each item. The problem is that I MUST display 64*64 bitmaps. >>I'd like to know if I can use a CImageList to do that. > >-You can't, inherently. List controls can only directly support small icons, >-large icons, or state images. None of these image types are 64x64 pixels in >-size. > > hmm why wont this work? > >CImageList *il = new CImageList(); > il->Create(64,64,TRUE,1,1); > il->Add( CBitmap* pbmImage, COLORREF crMask ); > > where CBitmap is a 64x64 16 color bitmap That'll work in that it compiles and runs without error. But it doesn't work because it has nothing to do with a list view control. You've just, independently of any control at all, created an image list and slapped a bitmap on it. If you want to finish writing code in response to the question, you'll need to associate that image list with the list view. To do that, you'll need to call CListView::SetImageList(). That function takes an enum which indicates the size of the images: LVSIL_NORMAL Image list with large icons. LVSIL_SMALL Image list with small icons. LVSIL_STATE Image list with state images. none of these are the same size as 64-by-64 pixels. I don't think the list view control is prepared to paint and lay out bitmaps of an arbitrary size: it works with only these three. > Anyone for tennis? It's surprising that beer cans don't fall out of my pockets when I run. .B ekiM http://www.nwlink.com/~mikeblas/ These words are my own. I do not speak on behalf of Microsoft.
R.H.J. Geraets -- R.Geraets@Ehv.Tass.Philips.Com Tuesday, August 13, 1996 [Mini-digest: 2 responses] Hey Mike, I think we have found an area where a lister can actually teach you something! (isn't that nice ;-) A CListcontrol object will accept and correctly draw these images. I myself am using several list controls that hold images of 64x48 pixels (using LVSIL_NORMAL). No problems here. (Although I must admit I have not succeeded in using more than 16 colors for these images, I guess more than the 16 standard windows colors will cause problems on 256 color displays). Bye, Rene' Geraets -----From: Lev GloukhenkiDefinitely not right ! First of all, code like this works fine (I checked it with CListView object, but I believe that there is no problem with the "pure" CListCtrl ). int MylistView::OnCreate(LPCREATESTRUCT lpCreateStruct) { lpCreateStruct->style |= ( LVS_ICON | LVS_AUTOARRANGE ); bool res = m_ctlImage.Create(IDB_BITMAP1, 64 ,0,RGB(0,132,132)); ^ m_ctlImage.SetBkColor(GetSysColor(COLOR_WINDOW)); if (CListView::OnCreate(lpCreateStruct) == -1) return -1; GetListCtrl().SetImageList(&m_ctlImage, LVSIL_NORMAL ); return 0; } // MylistView::OnCreate IDB_BITMAP1 is a 64x640 pixels bitmap ( contains 10 64x64 icons ) m_ctlImage is a CListView-derived class member of type CImageList The second : here is the fragment from Microsoft's COMMCTRL.H : #define LVSIL_NORMAL 0 #define LVSIL_SMALL 1 #define LVSIL_STATE 2 Preprocessor definitions ( not enum ) LVSIL_NORMAL, LVSIL_SMALL, LVSIL_STATE do not define icon sizes at all. You just can assosiate with control up to three ImageLists,one of each type ( with arbitrary size of bitmap, that must be defined as the second parameter in CImageList::Create() ), and they will be selected according to current control style - LVSIL_NORMAL for LVS_ICON, LVSIL_SMALL for LVS_SMALLICON, etc. The third : There is no member function of CListView::SetImageList(). ^^^^^^^^^ Gloukhenki Lev. Shira Computers Ltd. lev@shira.co.il
Mike Blaszczak -- mikeblas@nwlink.com Wednesday, August 14, 1996 At 09:31 AM 8/13/96 +0200, you wrote: >I think we have found an area where a lister can actually teach you something! I'm certainly not above that. After all the questions I've tirelessly answered here, I'd have to get a few wrong sometime. >A CListcontrol object will accept and correctly draw these images. >I myself am using several list controls that hold images of 64x48 pixels >(using LVSIL_NORMAL). >No problems here. Groovy: I'm glad it works out. This certainly didn't work when I last tried it, which was probably back in the Windows 95 beta. I can't remember which icon type I tried it with, but the control didn't draw anything unless the size I set was exactly equal to the GetSystemMetrics() dimensions for the corresponding icon style. .B ekiM http://www.nwlink.com/~mikeblas/ These words are my own. I do not speak on behalf of Microsoft.
| Вернуться в корень Архива |