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.
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:
Then open the properties dialog of the
listbox and select the styles tab and change the properties as changed in the picture like this:
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:
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
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.
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:
call the member function
Add() like this:
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
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:
where the parameter
COwnerDrawListBox::ITEM_LEFT that is passed to the function
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:
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 firstname.lastname@example.org or leave me a message, I promise that I'll reply. Thanks a lot.