X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d13c32e99d20b8282f590b5f5beef50b63662e5a..63cc5d9d20f997961881855811f6b6987679969d:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 049703b142..eb551853d5 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -2,7 +2,7 @@ // Name: msw/notebook.cpp // Purpose: implementation of wxNotebook // Author: Vadim Zeitlin -// Modified by: +// Modified by: // Created: 11.06.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin @@ -68,9 +68,11 @@ BEGIN_EVENT_TABLE(wxNotebook, wxControl) EVT_NOTEBOOK_PAGE_CHANGED(-1, wxNotebook::OnSelChange) - EVT_SIZE(wxNotebook::OnSize) - EVT_ERASE_BACKGROUND(wxNotebook::OnEraseBackground) + // doesn't work yet EVT_WINDOW_CREATE(wxNotebook::OnWindowCreate) + EVT_SIZE(wxNotebook::OnWindowCreate) + EVT_SET_FOCUS(wxNotebook::OnSetFocus) + EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey) END_EVENT_TABLE() @@ -121,10 +123,7 @@ bool wxNotebook::Create(wxWindow *parent, const wxString& name) { // base init - SetName(name); - SetParent(parent); - - m_windowId = id == -1 ? NewControlId() : id; + CreateBase(parent, id, pos, size, style, name); // colors and font m_backgroundColour = wxColour(GetSysColor(COLOR_BTNFACE)); @@ -164,14 +163,13 @@ bool wxNotebook::Create(wxWindow *parent, } // Not all compilers recognise SetWindowFont -// SetWindowFont((HWND)m_hwnd, ::GetStockObject(DEFAULT_GUI_FONT), FALSE); ::SendMessage((HWND) m_hwnd, WM_SETFONT, (WPARAM)::GetStockObject(DEFAULT_GUI_FONT),TRUE); - if ( parent != NULL ) + if ( parent != NULL ) parent->AddChild(this); - + SubclassWin(m_hWnd); return TRUE; @@ -267,11 +265,19 @@ bool wxNotebook::SetPageImage(int nPage, int nImage) } void wxNotebook::SetImageList(wxImageList* imageList) -{ +{ m_pImageList = imageList; TabCtrl_SetImageList(m_hwnd, (HIMAGELIST)imageList->GetHIMAGELIST()); } + +// Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH +// style. +void wxNotebook::SetTabSize(const wxSize& sz) +{ + ::SendMessage(GetHwnd(), TCM_SETITEMSIZE, 0, MAKELPARAM(sz.x, sz.y)); +} + // ---------------------------------------------------------------------------- // wxNotebook operations // ---------------------------------------------------------------------------- @@ -304,8 +310,6 @@ bool wxNotebook::RemovePage(int nPage) // remove all pages bool wxNotebook::DeleteAllPages() { - TabCtrl_DeleteAllItems(m_hwnd); - int nPageCount = GetPageCount(); int nPage; for ( nPage = 0; nPage < nPageCount; nPage++ ) @@ -313,6 +317,8 @@ bool wxNotebook::DeleteAllPages() m_aPages.Clear(); + TabCtrl_DeleteAllItems(m_hwnd); + return TRUE; } @@ -363,7 +369,7 @@ bool wxNotebook::InsertPage(int nPage, // save the pointer to the page m_aPages.Insert(pPage, nPage); - // some page must be selected: either this one or the first one if there is + // some page must be selected: either this one or the first one if there is // still no selection if ( bSelect ) m_nSelection = nPage; @@ -371,9 +377,12 @@ bool wxNotebook::InsertPage(int nPage, m_nSelection = 0; // don't show pages by default (we'll need to adjust their size first) - HWND hwnd = (HWND)pPage->GetHWND(); + HWND hwnd = GetWinHwnd(pPage); SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_VISIBLE); + // this updates internal flag too - otherwise it will get out of sync + pPage->Show(FALSE); + return TRUE; } @@ -381,7 +390,7 @@ bool wxNotebook::InsertPage(int nPage, // wxNotebook callbacks // ---------------------------------------------------------------------------- -void wxNotebook::OnSize(wxSizeEvent& event) +void wxNotebook::OnWindowCreate(wxWindowCreateEvent& event) { // make sure the current page is shown and has focus (it's useful because all // pages are created invisible initially) @@ -459,12 +468,7 @@ bool wxNotebook::DoPhase(int /* nPhase */) return TRUE; } -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); @@ -479,13 +483,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(); @@ -538,16 +542,3 @@ void wxNotebook::ChangePage(int nOldSel, int nSel) m_nSelection = nSel; s_bInsideChangePage = FALSE; } - -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)); -} -