Click here to Skip to main content
6,305,776 members and growing! (15,214 online)
Email Password   helpLost your password?
Desktop Development » Combo & List Boxes » General     Beginner License: The Code Project Open License (CPOL)

Graphic and Text Ownerdraw Listbox

By >>MonMon<<

Already made MFC ownerdraw listbox that holds text and icons
C++, Windows, Visual Studio, MFC, Dev
Version:2 (See All)
Posted:29 Sep 2006
Updated:1 Sep 2008
Views:34,045
Bookmarked:26 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
17 votes for this article.
Popularity: 4.04 Rating: 3.29 out of 5
4 votes, 23.5%
1
2 votes, 11.8%
2
2 votes, 11.8%
3
3 votes, 17.6%
4
6 votes, 35.3%
5
Sample Image - MFC_OwnerDraw_Listbox.jpg

Introduction

Hi, everyone. This is my first article on CodeProject and I hope you find it useful. My article is about an ownerdraw MFC listbox that I developed that accepts text and icons in it. The last thing is that I would like you to rate the article so I can know your opinion. Thanks a lot.

Listbox Features

As we all know, the regular listbox that you drag and drop from the control toolbar in the Visual Studio 6 just accepts text. But I made three extra features in my listbox which are:

  • Accept graphic icons (.ico) files beside the text.
  • You can determine the text and the icon positions in the listbox (left or right).
  • You can drag and drop any (.ico) icon files in the listbox and they will be automatically added.

Things To Do Before You Begin

There are some procedures in the design that should be taken into consideration before using the COwnerDrawListBox class. First open the resource tab in Visual Studio and select the dialog that you will put your listbox in and drag a listbox from the control bar and adjust it on the dialog like this:

Project Settings

Then open the properties dialog of the listbox and select the styles tab and change the properties as changed in the picture like this:

Listbox Styles Settings

You have to change the owner draw style to variable, because our listbox contains text and icons to draw, then uncheck the sort and check the vertical scroll as shown above. After that, select the next tab (Extended styles) and check accept files as shown:

Listbox Extended Settings

One last thing, after you had done all that you have to make a variable and attach it to the listbox control so you can use and add items in it, but be sure that you made the variable from our class COwnerDrawListBox, not CListBox.

Using the Code

First of all, you must add the OwnerDrawListBox .cpp and .h files to the project. Let us suppose that you are working on a Dialog based MFC project as the demo project, if the project name is OwnerDraw, then in the COwnerDrawDlg class, you should include the OwnerDrawListBox files.

#include "OwnerDrawListBox.h"

Then suppose the place that we are going to add the items in the list box is in the OnInitDialog() function and our object from the COwnerDrawListBox class is called m_OwnerListBox, so, just before the line:

return TRUE;

call the member function Add() like this:

m_OwnerListBox.Add("Cafe", AfxGetApp()->LoadIcon(IDI_CAFE));

Where the macro IDI_CAFE is the icon added and named to the project resources. Then there are two other helping functions that I made to help you set the icon and the text position SetIconPosition and SetTextPosition respectively. If you wanted to set the position of one, then you have to set the position of the other else the one which its position was set is the one that will be drawn and the other won't be drawn. You can use the two functions like this:

m_OwnerListBox.SetTextPosition(COwnerDrawListBox::ITEM_LEFT);
m_OwnerListBox.SetIconPosition(COwnerDrawListBox::ITEM_RIGHT);

where the parameter COwnerDrawListBox::ITEM_RIGHT or COwnerDrawListBox::ITEM_LEFT that is passed to the function SetIconPosition or SetTextPosition is the value where you want to set the text or the icon in the listbox. If you didn't set either positions of the icon and the text, they will be set to the default position where the text will be on the right and the icon will be on the left.

After you have finished, you must call function Destroy() to delete all the pointers used in the COwnerDrawListBox class and not to allow any memory leaks to happen like this:

m_OwnerDrawListBox.Destroy();

About Me

My Name is Mina Nabil, I'm working as a Software Engineer in Pyramids Systems Development (PSD) and this my first article on CodeProect as I said before, so I would like to hear your comments, reviews and if anyone wants to ask anything, just mail me at mina.nsami@gmail.com or leave me a message, I promise that I'll reply. Thanks a lot.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

>>MonMon<<


Member

Occupation: Software Developer
Location: Egypt Egypt

Other popular Combo & List Boxes articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 7 of 7 (Total in Forum: 7) (Refresh)FirstPrevNext
QuestionCDC detach problem in DrawItem method Pinmembermaqmakmac19:58 14 Nov '08  
Generalgreat job PinmemberJermeen0:12 25 Jul '07  
GeneralI like this one ! Pinmember2pers10:05 26 Jan '07  
GeneralRe: I like this one ! Pinmember2pers10:25 26 Jan '07  
GeneralProblem with GetText Pinmemberrockaden8:37 24 Oct '06  
GeneralRe: Problem with GetText PinmemberMonMon_MFC2:06 27 Oct '06  
GeneralRe: Problem with GetText Pinmemberev_Genius0:03 13 Aug '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 1 Sep 2008
Editor: Deeksha Shenoy
Copyright 2006 by >>MonMon<<
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project