X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd3f686c274a264e89ea97505350a82c1134f307..4e4ea166d76da40eaa5fdcf9e958d93521f72fba:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 74dfb4cd9d..8eb91dbc34 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -27,20 +27,26 @@ #include #include +#include +#include #include #include // Windows standard headers #ifndef __WIN95__ - #error "wxNotebook is not supported under Windows 3.1" + #error "wxNotebook is only supported Windows 95 and above" #endif //Win95 #include // for SetWindowFont +#ifndef __TWIN32__ #ifdef __GNUWIN32__ #include "wx/msw/gnuwin32/extra.h" -#else //!GnuWin32 +#endif +#endif + +#if !defined(__GNUWIN32__) || defined(__TWIN32__) #include #endif @@ -69,7 +75,7 @@ END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl) - IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxCommandEvent) + IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxNotifyEvent) #endif // ============================================================================ @@ -128,10 +134,15 @@ bool wxNotebook::Create(wxWindow *parent, m_windowStyle = style | wxTAB_TRAVERSAL; long tabStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | TCS_TABS; + + if (m_windowStyle & wxCLIP_CHILDREN) + tabStyle |= WS_CLIPCHILDREN; if ( m_windowStyle & wxTC_MULTILINE ) tabStyle |= TCS_MULTILINE; if ( m_windowStyle & wxBORDER ) tabStyle &= WS_BORDER; + if (m_windowStyle & wxNB_FIXEDWIDTH) + tabStyle |= TCS_FIXEDWIDTH ; // create the tab control. m_hWnd = (WXHWND)CreateWindowEx @@ -326,9 +337,23 @@ bool wxNotebook::InsertPage(int nPage, // add the tab to the control TC_ITEM tcItem; - tcItem.mask = TCIF_TEXT | TCIF_IMAGE; - tcItem.pszText = (char *)strText.c_str(); - tcItem.iImage = imageId; + tcItem.mask = 0; + + if (imageId != -1) + { + tcItem.mask |= TCIF_IMAGE; + tcItem.iImage = imageId; + } + else + tcItem.iImage = 0; + + if (!strText.IsEmpty()) + { + tcItem.mask |= TCIF_TEXT; + tcItem.pszText = (char *)strText.c_str(); + } + else + tcItem.pszText = (char *) NULL; if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) { wxLogError("Can't create the notebook page '%s'.", strText.c_str()); @@ -358,11 +383,13 @@ bool wxNotebook::InsertPage(int nPage, void wxNotebook::OnSize(wxSizeEvent& event) { - // emulate page change (it's esp. important to do it first time because - // otherwise our page would stay invisible) - int nSel = m_nSelection; - m_nSelection = -1; - SetSelection(nSel); + // make sure the current page is shown and has focus (it's useful because all + // pages are created invisible initially) + if ( m_nSelection != -1 ) { + wxNotebookPage *pPage = m_aPages[m_nSelection]; + pPage->Show(TRUE); + pPage->SetFocus(); + } // fit the notebook page to the tab control's display area RECT rc; @@ -437,7 +464,7 @@ void wxNotebook::Command(wxCommandEvent& event) wxFAIL_MSG("wxNotebook::Command not implemented"); } -bool wxNotebook::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM* result) +bool wxNotebook::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result) { wxNotebookEvent event(wxEVT_NULL, m_windowId); @@ -452,13 +479,13 @@ bool wxNotebook::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM* result) break; default: - return wxControl::MSWNotify(wParam, lParam, result); + return wxControl::MSWOnNotify(idCtrl, lParam, result); } event.SetSelection(TabCtrl_GetCurSel(m_hwnd)); event.SetOldSelection(m_nSelection); event.SetEventObject(this); - event.SetInt(LOWORD(wParam)); // ctrl id + event.SetInt(idCtrl); bool processed = GetEventHandler()->ProcessEvent(event); *result = !event.IsAllowed(); @@ -517,3 +544,10 @@ void wxNotebook::OnEraseBackground(wxEraseEvent& event) Default(); } +// Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH +// style. +void wxNotebook::SetTabSize(const wxSize& sz) +{ + ::SendMessage((HWND) GetHWND(), TCM_SETITEMSIZE, 0, MAKELPARAM(sz.x, sz.y)); +} +