Cured problem introduced by LEAVE/ENTER OnIdle code; bugs in gauge sizing
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@135 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -182,6 +182,21 @@ WXHBRUSH wxStaticBox::OnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUIN
|
||||
// outline.
|
||||
void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
|
||||
{
|
||||
// If we don't have this (call Default()), we don't paint the background properly.
|
||||
// If we do have this, we seem to overwrite enclosed controls.
|
||||
// Is it the WS_CLIPCHILDREN style that's causing the problems?
|
||||
// Probably - without this style, the background of the window will show through,
|
||||
// so the control doesn't have to paint it. The window background will always be
|
||||
// painted before all other controls, therefore there are no problems with
|
||||
// controls being hidden by the static box.
|
||||
// So, if we could specify wxCLIP_CHILDREN in window, or not, we could optimise painting better.
|
||||
// We would assume wxCLIP_CHILDREN in a frame and a scrolled window, but not in a panel.
|
||||
// Is this too platform-specific?? What else can we do? Not a lot, since we have to pass
|
||||
// this information from arbitrary wxWindow derivatives, and it depends on what you wish to
|
||||
// do with the windows.
|
||||
// Alternatively, just make sure that wxStaticBox is always at the back! There are probably
|
||||
// few other circumstances where it matters about child clipping. But what about painting onto
|
||||
// to panel, inside a groupbox? Doesn't appear, because the box wipes it out.
|
||||
wxWindow *parent = GetParent();
|
||||
if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) )
|
||||
{
|
||||
@@ -204,7 +219,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
|
||||
|
||||
long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||
{
|
||||
// TODO: somehow, this has to accept mouse clicks in user interface edit mode,
|
||||
// TODO: somehow, this has to accept mouse clicks in user interface edit mode,
|
||||
// but not otherwise. Only there is no longer a UI edit mode...
|
||||
|
||||
// It worked before because the message could be processed if not in UI
|
||||
@@ -215,8 +230,21 @@ long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||
// skip the code below. Too time consuming though.
|
||||
// Perhaps it's ok to do the default thing *anyway* because the title or edge
|
||||
// of the window may still be active!
|
||||
// if (nMsg == WM_NCHITTEST)
|
||||
// return Default();
|
||||
|
||||
if (nMsg == WM_NCHITTEST)
|
||||
return Default();
|
||||
{
|
||||
int xPos = LOWORD(lParam); // horizontal position of cursor
|
||||
int yPos = HIWORD(lParam); // vertical position of cursor
|
||||
|
||||
ScreenToClient(&xPos, &yPos);
|
||||
|
||||
// Make sure you can drag by the top of the groupbox, but let
|
||||
// other (enclosed) controls get mouse events also
|
||||
if (yPos < 10)
|
||||
return (long)HTCLIENT;
|
||||
}
|
||||
|
||||
return wxControl::MSWWindowProc(nMsg, wParam, lParam);
|
||||
}
|
||||
|
Reference in New Issue
Block a user