#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/control.h"
+ #include "wx/panel.h"
#endif // WX_PRECOMP
#include "wx/imaglist.h"
{
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
+ const int selOld = m_nSelection;
+
if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )
{
TabCtrl_SetCurSel(GetHwnd(), nPage);
UpdateSelection(nPage);
}
- return m_nSelection;
+ return selOld;
}
bool wxNotebook::SetPageText(size_t nPage, const wxString& strText)
// succeeded: save the pointer to the page
m_pages.Insert(pPage, nPage);
+ // also ensure that the notebook background is used for its pages by making
+ // them transparent: this ensures that MSWGetBgBrush() queries the notebook
+ // for the background brush to be used for erasing them
+ if ( wxPanel *panel = wxDynamicCast(pPage, wxPanel) )
+ {
+ panel->MSWSetTransparentBackground();
+ }
+
// we may need to adjust the size again if the notebook size changed:
// normally this only happens for the first page we add (the tabs which
// hadn't been there before are now shown) but for a multiline notebook it
}
}
-WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd)
+WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child)
{
if ( m_hbrBackground )
{
// before drawing with the background brush, we need to position it
// correctly
RECT rc;
- ::GetWindowRect((HWND)hWnd, &rc);
+ ::GetWindowRect(GetHwndOf(child), &rc);
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
return m_hbrBackground;
}
- return wxNotebookBase::MSWGetBgBrushForChild(hDC, hWnd);
+ return wxNotebookBase::MSWGetBgBrushForChild(hDC, child);
}
bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)