Removing an ugly border
-
dontknowitall wrote:
That line is there because the tab control (view) has the WS_EX_CLIENTEDGE style. I want it that way because it looks better.
Yeah I've gone back and forth on that one. Still undecided!
dontknowitall wrote:
However, it creates the "double-border" thing because the splitter or frame window is drawing another "client edge".
Exactly! I've been looking at the CSplitterWnd code (that's always bugged me). Eventually I'l have time to write my own splitter but custom UI is on the back burner for me :) Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
Mark Salsbery wrote:
Yeah I've gone back and forth on that one. Still undecided!
Me artist. Me like pretty. Me say it look better, it be better. Ook. Ook.
Mark Salsbery wrote:
Eventually I'l have time to write my own splitter but custom UI is on the back burner for me
So...what you are saying is that I'd have to roll my own splitter? ST_SplitterWnd is probably a better codebase to start from and then just override the painting code from CSplitterWnd in ST_SplitterWnd but that would really only be necessary for the case where someone wants to set an alternate style. The default works pretty well for most cases.
-
Mark Salsbery wrote:
Yeah I've gone back and forth on that one. Still undecided!
Me artist. Me like pretty. Me say it look better, it be better. Ook. Ook.
Mark Salsbery wrote:
Eventually I'l have time to write my own splitter but custom UI is on the back burner for me
So...what you are saying is that I'd have to roll my own splitter? ST_SplitterWnd is probably a better codebase to start from and then just override the painting code from CSplitterWnd in ST_SplitterWnd but that would really only be necessary for the case where someone wants to set an alternate style. The default works pretty well for most cases.
:laugh: Overriding the painting part is fairly easy. It's all the calculations for repositioning the view panes that are based on the 3D border that are the problem! CSplitterWnd::OnDrawSplitter() overridable looks interesting... If you do all that work, I'll gladly "test" it for you for free :) Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
Mark Salsbery wrote:
Yeah I've gone back and forth on that one. Still undecided!
Me artist. Me like pretty. Me say it look better, it be better. Ook. Ook.
Mark Salsbery wrote:
Eventually I'l have time to write my own splitter but custom UI is on the back burner for me
So...what you are saying is that I'd have to roll my own splitter? ST_SplitterWnd is probably a better codebase to start from and then just override the painting code from CSplitterWnd in ST_SplitterWnd but that would really only be necessary for the case where someone wants to set an alternate style. The default works pretty well for most cases.
I'm still looking at the CSplitterWnd code. There's a few handy undocumented overridables. May not be as much work as I thought... I'm going to try a bit and see what happens. Opening the can of worms...
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
Mark Salsbery wrote:
Yeah I've gone back and forth on that one. Still undecided!
Me artist. Me like pretty. Me say it look better, it be better. Ook. Ook.
Mark Salsbery wrote:
Eventually I'l have time to write my own splitter but custom UI is on the back burner for me
So...what you are saying is that I'd have to roll my own splitter? ST_SplitterWnd is probably a better codebase to start from and then just override the painting code from CSplitterWnd in ST_SplitterWnd but that would really only be necessary for the case where someone wants to set an alternate style. The default works pretty well for most cases.
Here's a custom CSplitterWnd class - all I changed was the constructor :) Needs a little work but getting rid of the fat 2 pixel border helps. I'd like to draw them more subtle like Visual Studios... (I removed themes for these screenshots) Before (CSplitterWnd)[^] After (CMySplitterWnd)[^]
class CMySplitterWnd : public CSplitterWnd
{
public:
CMySplitterWnd();
};CMySplitterWnd::CMySplitterWnd() : CSplitterWnd()
{
// from CSplitterWnd
// // default splitter box/bar sizes (includes borders)
// m_cxSplitter = m_cySplitter = 3 + 2 + 2;
// m_cxBorderShare = m_cyBorderShare = 0;
// m_cxSplitterGap = m_cySplitterGap = 3 + 2 + 2;
// m_cxBorder = m_cyBorder = 2;// default splitter box/bar sizes (includes borders)
m_cxSplitter = m_cySplitter = 3;
m_cxBorderShare = m_cyBorderShare = 0;
m_cxSplitterGap = m_cySplitterGap = 3;
m_cxBorder = m_cyBorder = 0;
}"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
Mark Salsbery wrote:
Yeah I've gone back and forth on that one. Still undecided!
Me artist. Me like pretty. Me say it look better, it be better. Ook. Ook.
Mark Salsbery wrote:
Eventually I'l have time to write my own splitter but custom UI is on the back burner for me
So...what you are saying is that I'd have to roll my own splitter? ST_SplitterWnd is probably a better codebase to start from and then just override the painting code from CSplitterWnd in ST_SplitterWnd but that would really only be necessary for the case where someone wants to set an alternate style. The default works pretty well for most cases.
These settings seem more pleasing... m_cxSplitter = m_cySplitter = 3 + 1 + 1; m_cxBorderShare = m_cyBorderShare = 0; m_cxSplitterGap = m_cySplitterGap = 3 + 1 + 1; m_cxBorder = m_cyBorder = 1; Here's a screenshot[^] -- modified at 21:03 Wednesday 21st February, 2007
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
These settings seem more pleasing... m_cxSplitter = m_cySplitter = 3 + 1 + 1; m_cxBorderShare = m_cyBorderShare = 0; m_cxSplitterGap = m_cySplitterGap = 3 + 1 + 1; m_cxBorder = m_cyBorder = 1; Here's a screenshot[^] -- modified at 21:03 Wednesday 21st February, 2007
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
Not exactly the effect I'm going after. It affects both sides of the splitter. I want to control just the "client edge" drawing of one specific view. In this case, the code should only affect just one side of the splitter (top part). Figure how how to affect the drawing of a single side of a splitter and you'll probably have code worthy of a CP article on your hands.
-
Not exactly the effect I'm going after. It affects both sides of the splitter. I want to control just the "client edge" drawing of one specific view. In this case, the code should only affect just one side of the splitter (top part). Figure how how to affect the drawing of a single side of a splitter and you'll probably have code worthy of a CP article on your hands.
That may be easy. There's a documented override for the drawing. I'll try in the morning (11:17pm here :)) It looks like I need something similar with a splitter on a tab control. The top line of the splitter pane box messes up the indication of which tab is selected. Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
That may be easy. There's a documented override for the drawing. I'll try in the morning (11:17pm here :)) It looks like I need something similar with a splitter on a tab control. The top line of the splitter pane box messes up the indication of which tab is selected. Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
Mark Salsbery wrote:
That may be easy. There's a documented override for the drawing. I'll try in the morning (11:17pm here )
Get anywhere with that?
-
Mark Salsbery wrote:
That may be easy. There's a documented override for the drawing. I'll try in the morning (11:17pm here )
Get anywhere with that?
I'm back on it - got totally sidetracked on some emailed code yesterday :) I shall return...
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it."
-
Not exactly the effect I'm going after. It affects both sides of the splitter. I want to control just the "client edge" drawing of one specific view. In this case, the code should only affect just one side of the splitter (top part). Figure how how to affect the drawing of a single side of a splitter and you'll probably have code worthy of a CP article on your hands.
Ok. So far I can control... Splitter width 3D Border width (0,1,2(default)) Which border sides are drawn All the colors of the drawn border sides (if thickness 2, 2 colors each) Face color of splitter bar All border and face colors of the splitter box (shown/used on dynamic splitters) Useful?
dontknowitall wrote:
I want to control just the "client edge" drawing of one specific view
:doh: That would be tough - I need to investigate that further. Still finishing it up in article-worthy (hopefully) fashion. Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it." (Rex Kramer "Airplane!")
-
Ok. So far I can control... Splitter width 3D Border width (0,1,2(default)) Which border sides are drawn All the colors of the drawn border sides (if thickness 2, 2 colors each) Face color of splitter bar All border and face colors of the splitter box (shown/used on dynamic splitters) Useful?
dontknowitall wrote:
I want to control just the "client edge" drawing of one specific view
:doh: That would be tough - I need to investigate that further. Still finishing it up in article-worthy (hopefully) fashion. Mark
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it." (Rex Kramer "Airplane!")
Mark Salsbery wrote:
Ok. So far I can control... Splitter width 3D Border width (0,1,2(default)) Which border sides are drawn All the colors of the drawn border sides (if thickness 2, 2 colors each) Face color of splitter bar All border and face colors of the splitter box (shown/used on dynamic splitters) Useful?
Interesting. I'd probably have to see a demo app. in action. Or get sleep. One of the two anyway.
Mark Salsbery wrote:
That would be tough - I need to investigate that further.
Hmm...maybe it can be faked by setting border width to 0 and then setting WS_EX_CLIENTEDGE on each view EXCEPT the views that authors don't want. Would that work? I'll try it sometime in the next two days with ST_SplitterWnd, but it would be nice to know if it will work up front before I burn a couple hours trying.
-
Mark Salsbery wrote:
Ok. So far I can control... Splitter width 3D Border width (0,1,2(default)) Which border sides are drawn All the colors of the drawn border sides (if thickness 2, 2 colors each) Face color of splitter bar All border and face colors of the splitter box (shown/used on dynamic splitters) Useful?
Interesting. I'd probably have to see a demo app. in action. Or get sleep. One of the two anyway.
Mark Salsbery wrote:
That would be tough - I need to investigate that further.
Hmm...maybe it can be faked by setting border width to 0 and then setting WS_EX_CLIENTEDGE on each view EXCEPT the views that authors don't want. Would that work? I'll try it sometime in the next two days with ST_SplitterWnd, but it would be nice to know if it will work up front before I burn a couple hours trying.
dontknowitall wrote:
Hmm...maybe it can be faked by setting border width to 0 and then setting WS_EX_CLIENTEDGE on each view EXCEPT
Good idea. I'll send the code tomorrow am - it's easy enough to test - it's derived from CSplitterWnd.
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it." (Rex Kramer "Airplane!")
-
dontknowitall wrote:
Hmm...maybe it can be faked by setting border width to 0 and then setting WS_EX_CLIENTEDGE on each view EXCEPT
Good idea. I'll send the code tomorrow am - it's easy enough to test - it's derived from CSplitterWnd.
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it." (Rex Kramer "Airplane!")
<jab>
-
dontknowitall wrote:
Hmm...maybe it can be faked by setting border width to 0 and then setting WS_EX_CLIENTEDGE on each view EXCEPT
Good idea. I'll send the code tomorrow am - it's easy enough to test - it's derived from CSplitterWnd.
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot? Of course you don't, no one does. It never happens. It's a dumb question... skip it." (Rex Kramer "Airplane!")
Anything happening with this? I've been busy with other projects and haven't had time to try anything out.