How do I completely take over drawing for a listbox
-
Hi, I asked a question sort of similar to this a few days ago, but the problem has now evolved; what I want to do is: I am using C++ with the windows API, without MFC. I want to retain all the functionality of a listbox but I want to draw everything myself. If I set the style to OWNERDRAW I can at least draw the listbox items and the box itself (if I don't give it border) but I still can't draw any scrollbars created using WS_VSCROLL or WS_HSCROLL; they seem to use the default windows drawing behavior. So how do I completely override all the default drawing for a listbox (or any windows control for that matter)? I don't want to draw over the default scrollbars; I want them to simply not draw at all, but still "exist" and allow me to ownerdraw them. Thanks!
KR
-
Hi, I asked a question sort of similar to this a few days ago, but the problem has now evolved; what I want to do is: I am using C++ with the windows API, without MFC. I want to retain all the functionality of a listbox but I want to draw everything myself. If I set the style to OWNERDRAW I can at least draw the listbox items and the box itself (if I don't give it border) but I still can't draw any scrollbars created using WS_VSCROLL or WS_HSCROLL; they seem to use the default windows drawing behavior. So how do I completely override all the default drawing for a listbox (or any windows control for that matter)? I don't want to draw over the default scrollbars; I want them to simply not draw at all, but still "exist" and allow me to ownerdraw them. Thanks!
KR
Greg Ellis wrote:
Next, I had to find a way to customize the existing scrollbars or else make my own. So, I tried to subclass the CScrollbar class; whenever I tried to use the GetScollbarCtrl() function from the CListCtrl, it returned null. Obviously, the scrollbars are not real. Unfortunately, this means I had to hide the existing scrollbars and create my own (a lot more work than just skinning the existing ones). I began to try to hide the scrollbars of the CListCtrl and then somehow create my own. I found a solution for hiding the scrollbars in a CListCtrl on the CodeGuru message boards from Filbert Fox. This worked great, so my next task was to create my own scrollbars. I chose to derive a class from CStatic and create the scrollbar from scratch using bitmaps. It took a while and a lot of tweaking, but I got the custom scrollbar created and working including the wheel mouse, arrow keys, and pageup/pagedown keys.
-
Greg Ellis wrote:
Next, I had to find a way to customize the existing scrollbars or else make my own. So, I tried to subclass the CScrollbar class; whenever I tried to use the GetScollbarCtrl() function from the CListCtrl, it returned null. Obviously, the scrollbars are not real. Unfortunately, this means I had to hide the existing scrollbars and create my own (a lot more work than just skinning the existing ones). I began to try to hide the scrollbars of the CListCtrl and then somehow create my own. I found a solution for hiding the scrollbars in a CListCtrl on the CodeGuru message boards from Filbert Fox. This worked great, so my next task was to create my own scrollbars. I chose to derive a class from CStatic and create the scrollbar from scratch using bitmaps. It took a while and a lot of tweaking, but I got the custom scrollbar created and working including the wheel mouse, arrow keys, and pageup/pagedown keys.
Ugh, I can't believe there's no way to custom draw the internal scrollbars of a control... it may not have an HWND associated with it, but you can click it and use it just like any other scrollbar so it must send some sort of scrollbar messages, and it's drawn somewhere, somehow, so there has to be a way to custom draw it... Thanks for the link though, more and more it keeps looking like I will have to put in my own custom scrollbars but I wish I could just take advantage of the internal ones.
KR