void wxMDIParentFrame::UpdateClientSize() { if ( GetClientWindow() ) { int width, height; GetClientSize(&width, &height); GetClientWindow()->SetSize(0, 0, width, height); } }
void wxMDIParentFrame::OnSize(wxSizeEvent&) { if ( GetClientWindow() ) { int width, height; GetClientSize(&width, &height); GetClientWindow()->SetSize(0, 0, width, height); } }
WXLRESULT wxMDIParentFrame::MSWDefWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { WXHWND clientWnd; if ( GetClientWindow() ) clientWnd = GetClientWindow()->GetHWND(); else clientWnd = 0; return DefFrameProc(GetHwnd(), (HWND)clientWnd, message, wParam, lParam); }
void wxMDIParentFrame::OnSize(wxSizeEvent& WXUNUSED(event)) { #if wxUSE_CONSTRAINTS if (GetAutoLayout()) Layout(); #endif int x = 0; int y = 0; int width, height; GetClientSize(&width, &height); if ( GetClientWindow() ) GetClientWindow()->SetSize(x, y, width, height); }
void wxMDIParentFrame::UpdateClientSize() { int width, height; GetClientSize(&width, &height); if ( wxSizer* sizer = GetSizer() ) { sizer->SetDimension(0, 0, width, height); } else { if ( GetClientWindow() ) GetClientWindow()->SetSize(0, 0, width, height); } }
bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg) { MSG *pMsg = (MSG *)msg; // first let the current child get it if ( m_currentChild && m_currentChild->GetHWND() && m_currentChild->MSWTranslateMessage(msg) ) { return true; } // then try out accel table (will also check the menu accels) if ( wxFrame::MSWTranslateMessage(msg) ) { return true; } // finally, check for MDI specific built in accel keys if ( pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN ) { if ( ::TranslateMDISysAccel(GetWinHwnd(GetClientWindow()), pMsg)) return true; } return false; }
bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg) { MSG *pMsg = (MSG *)msg; // first let the current child get it wxMDIChildFrame * const child = GetActiveChild(); if ( child && child->MSWTranslateMessage(msg) ) { return true; } // then try out accelerator table (will also check the accelerators for the // normal menu items) if ( wxFrame::MSWTranslateMessage(msg) ) { return true; } #if wxUSE_MENUS && wxUSE_ACCEL // but it doesn't check for the (custom) accelerators of the window menu // items as it's not part of the menu bar as it's handled by Windows itself // so we need to do this explicitly if ( m_accelWindowMenu && m_accelWindowMenu->Translate(this, msg) ) return true; #endif // wxUSE_MENUS && wxUSE_ACCEL // finally, check for MDI specific built-in accelerators if ( pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN ) { if ( ::TranslateMDISysAccel(GetWinHwnd(GetClientWindow()), pMsg)) return true; } return false; }
void MyFrame::OnSize(wxSizeEvent& event) { int w, h; GetClientSize(&w, &h); GetClientWindow()->SetSize(0, 0, w, h); event.Skip(); }
wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const { HWND hWnd = (HWND)::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDIGETACTIVE, 0, 0L); if ( !hWnd ) return NULL; return static_cast<wxMDIChildFrame *>(wxFindWinFromHandle(hWnd)); }
void wxMDIParentFrame::RemoveWindowMenu() { if ( m_windowMenu ) { MDIRemoveWindowMenu(GetClientWindow(), m_hMenu); m_windowMenu->Detach(); } }
// Returns the active MDI child window wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const { HWND hWnd = (HWND)::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDIGETACTIVE, 0, 0L); if ( hWnd == 0 ) return NULL; else return (wxMDIChildFrame *)wxFindWinFromHandle((WXHWND) hWnd); }
void wxMDIParentFrame::Tile(wxOrientation orient) { wxASSERT_MSG( orient == wxHORIZONTAL || orient == wxVERTICAL, _T("invalid orientation value") ); ::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDITILE, orient == wxHORIZONTAL ? MDITILE_HORIZONTAL : MDITILE_VERTICAL, 0); }
void wxMDIParentFrame::AddWindowMenu() { if ( m_windowMenu ) { // For correct handling of the events from this menu we also must // attach it to the menu bar. m_windowMenu->Attach(GetMenuBar()); MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this)); } }
// /// Locates and returns the child window that is the target of the command and the /// command enabling messages. If the current application does not have focus or if /// the focus is within a toolbar in the application, GetCommandTarget returns the /// most recently active child window. If an alternative form of command processing /// is desired, a user's main window class can override this function. // TWindow::THandle TMDIFrame::GetCommandTarget() { TFrameWindow* mdiChild = GetClientWindow()->GetActiveMDIChild(); TRACEX(OwlCmd, 1, "TMDIFrame::GetCommandTarget - returns " << \ (mdiChild ? "ActiveMDIChild->GetCommandTarget()" \ : "TFrameWindow::GetCommandTarget()")); return mdiChild ? mdiChild->GetCommandTarget() : TFrameWindow::GetCommandTarget(); }
STDMETHODIMP CDrawMenu::Popup(/*[in, optional] */VARIANT X, /*[in, optional] */VARIANT Y) { USES_CONVERSION; int nCount = m_arrItems.GetSize(); if (nCount == 0) return S_FALSE; HMENU hMenu = CreatePopupMenu(); if (hMenu == NULL) return E_FAIL; int nIndex = 0; AddMenuItems(hMenu, nIndex, 0); HWND hWndParent = GetClientWindow(); POINT pt; GetCursorPos(&pt); ScreenToClient(hWndParent, &pt); if (X.vt != VT_ERROR) { VariantChangeType(&X, &X, 0, VT_I4); pt.x = X.intVal; } if (Y.vt != VT_ERROR) { VariantChangeType(&Y, &Y, 0, VT_I4); pt.y = Y.intVal; } ClientToScreen(hWndParent, &pt); Fire_Event(2); // 2011.4.25: 鼠标按下时弹出菜单时,释放鼠标捕获 SetCapture(FALSE); int nRet = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, hWndParent, 0); if (nRet > 0 && nRet <= m_arrItems.GetSize()) { CMenuItem& item = m_arrItems[nRet - 1]; Fire_MenuClick(nRet, item.m_bstrID); } DestroyMenu(hMenu); Fire_Event(3); return S_OK; }
void wxMDIParentFrame::InternalSetMenuBar() { if ( GetActiveChild() ) { AddWindowMenu(); } else // we don't have any MDI children yet { // wait until we do to add the window menu but do set the main menu for // now (this is done by AddWindowMenu() as a side effect) MDISetMenu(GetClientWindow(), (HMENU)m_hMenu, NULL); } }
void MainWindow::OnSashDrag(wxSashEvent& event) { s->SetDefaultSize(wxSize(event.GetDragRect().width, h)); #if wxUSE_MDI_ARCHITECTURE wxLayoutAlgorithm layout; layout.LayoutMDIFrame(this); #endif // wxUSE_MDI_ARCHITECTURE // Leaves bits of itself behind sometimes GetClientWindow()->Refresh(); }
void wxMDIParentFrame::SetWindowMenu(wxMenu* menu) { if (m_windowMenu) { if (GetMenuBar()) { // Remove old window menu RemoveWindowMenu(GetClientWindow(), m_hMenu); } delete m_windowMenu; m_windowMenu = (wxMenu*) NULL; } if (menu) { m_windowMenu = menu; if (GetMenuBar()) { InsertWindowMenu(GetClientWindow(), m_hMenu, GetHmenuOf(m_windowMenu)); } } }
void MyFrame::OnSize(wxSizeEvent& event) { int w, h; GetClientSize(&w, &h); m_textWindow->SetSize(0, 0, 200, h); GetClientWindow()->SetSize(200, 0, w - 200, h); // FIXME: On wxX11, we need the MDI frame to process this // event, but on other platforms this should not // be done. #ifdef __WXUNIVERSAL__ event.Skip(); #else wxUnusedVar(event); #endif }
//*************************************** mainFrame wxSize mainFrame::GetChildSize(int nPct) { #ifdef __NO_MDI__ wxSize sz = wxGetClientDisplayRect().GetSize(); #else wxSize sz = GetClientWindow()->GetSize(); wxStatusBar *pBar = GetStatusBar(); if(pBar) { wxSize szBar = pBar->GetSize(); int y = sz.GetHeight() - szBar.GetHeight(); sz.SetHeight(y); } #endif sz.SetHeight(sz.GetHeight() * nPct / 100); sz.SetWidth(sz.GetWidth() * nPct / 100); return sz; }
void wxAuiMDIParentFrame::Tile(wxOrientation orient) { wxAuiMDIClientWindow* client_window = GetClientWindow(); wxASSERT_MSG(client_window, wxT("Missing MDI Client Window")); int cur_idx = client_window->GetSelection(); if (cur_idx == -1) return; if (orient == wxVERTICAL) { client_window->Split(cur_idx, wxLEFT); } else if (orient == wxHORIZONTAL) { client_window->Split(cur_idx, wxTOP); } }
void wxMDIParentFrame::OnMDICommand(wxCommandEvent& event) { WXWPARAM wParam = 0; WXLPARAM lParam = 0; int msg; switch ( event.GetId() ) { case wxID_MDI_WINDOW_CASCADE: msg = WM_MDICASCADE; wParam = MDITILE_SKIPDISABLED; break; case wxID_MDI_WINDOW_TILE_HORZ: wParam |= MDITILE_HORIZONTAL; // fall through case wxID_MDI_WINDOW_TILE_VERT: if ( !wParam ) wParam = MDITILE_VERTICAL; msg = WM_MDITILE; wParam |= MDITILE_SKIPDISABLED; break; case wxID_MDI_WINDOW_ARRANGE_ICONS: msg = WM_MDIICONARRANGE; break; case wxID_MDI_WINDOW_NEXT: msg = WM_MDINEXT; lParam = 0; // next child break; case wxID_MDI_WINDOW_PREV: msg = WM_MDINEXT; lParam = 1; // previous child break; default: wxFAIL_MSG( "unknown MDI command" ); return; } ::SendMessage(GetWinHwnd(GetClientWindow()), msg, wParam, lParam); }
void DecisionLogicFrame::OnSashDrag(wxSashEvent& event) { if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE || winTree == NULL) return; if (event.GetId() == DecisionLogic_TreeWindow) winTree->SetDefaultSize(wxSize(event.GetDragRect().width, this->GetSize().GetHeight())); else if (event.GetId() == DecisionLogic_LogWindow) winLog->SetDefaultSize(wxSize(800, event.GetDragRect().height)); #if wxUSE_MDI_ARCHITECTURE wxLayoutAlgorithm layout; layout.LayoutMDIFrame(this); #endif // wxUSE_MDI_ARCHITECTURE // Leaves bits of itself behind sometimes GetClientWindow()->Refresh(); }
bool wxMDIParentFrame::ShouldBeVisible() const { for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext() ) { wxWindow *win = node->GetData(); if ( win->IsShown() && !wxDynamicCast(win, wxMDIChildFrame) #if wxUSE_STATUSBAR && win != (wxWindow*) GetStatusBar() #endif && win != GetClientWindow() ) { // if we have a non-MDI child, do remain visible so that it could // be used return true; } } return false; }
void wxMDIParentFrame::OnMDIChild(wxCommandEvent& event) { wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { wxWindow *child = node->GetData(); if ( child->GetHWND() ) { int childId = wxGetWindowId(child->GetHWND()); if ( childId == event.GetId() ) { ::SendMessage( GetWinHwnd(GetClientWindow()), WM_MDIACTIVATE, (WPARAM)child->GetHWND(), 0); return; } } node = node->GetNext(); } wxFAIL_MSG( "unknown MDI child selected?" ); }
void MyFrame::OnSashDrag(wxSashEvent& event) { if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) return; switch (event.GetId()) { case ID_WINDOW_TOP: { m_topWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height)); break; } case ID_WINDOW_LEFT1: { m_leftWindow1->SetDefaultSize(wxSize(event.GetDragRect().width, 1000)); break; } case ID_WINDOW_LEFT2: { m_leftWindow2->SetDefaultSize(wxSize(event.GetDragRect().width, 1000)); break; } case ID_WINDOW_BOTTOM: { m_bottomWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height)); break; } } #if wxUSE_MDI_ARCHITECTURE wxLayoutAlgorithm layout; layout.LayoutMDIFrame(this); #endif // wxUSE_MDI_ARCHITECTURE // Leaves bits of itself behind sometimes GetClientWindow()->Refresh(); }
bool wxMDIParentFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND hwnd) { // In case it's e.g. a toolbar. if ( hwnd ) { wxWindow *win = wxFindWinFromHandle(hwnd); if ( win ) return win->MSWCommand(cmd, id); } // is it one of standard MDI commands? WXWPARAM wParam = 0; WXLPARAM lParam = 0; int msg; switch ( id ) { case IDM_WINDOWCASCADE: msg = WM_MDICASCADE; wParam = MDITILE_SKIPDISABLED; break; case IDM_WINDOWTILEHOR: wParam |= MDITILE_HORIZONTAL; // fall through case IDM_WINDOWTILEVERT: if ( !wParam ) wParam = MDITILE_VERTICAL; msg = WM_MDITILE; wParam |= MDITILE_SKIPDISABLED; break; case IDM_WINDOWICONS: msg = WM_MDIICONARRANGE; break; case IDM_WINDOWNEXT: msg = WM_MDINEXT; lParam = 0; // next child break; case IDM_WINDOWPREV: msg = WM_MDINEXT; lParam = 1; // previous child break; default: msg = 0; } if ( msg ) { ::SendMessage(GetWinHwnd(GetClientWindow()), msg, wParam, lParam); return true; } // FIXME VZ: what does this test do?? if (id >= 0xF000) { return false; // Get WndProc to call default proc } if ( IsMdiCommandId(id) ) { wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { wxWindow *child = node->GetData(); if ( child->GetHWND() ) { long childId = wxGetWindowId(child->GetHWND()); if (childId == (long)id) { ::SendMessage( GetWinHwnd(GetClientWindow()), WM_MDIACTIVATE, (WPARAM)child->GetHWND(), 0); return true; } } node = node->GetNext(); } } else if ( m_parentFrameActive ) { return ProcessCommand(id); } else if ( m_currentChild ) { return m_currentChild->HandleCommand(id, cmd, hwnd); } else { // this shouldn't happen because it means that our messages are being // lost (they're not sent to the parent frame nor to the children) wxFAIL_MSG(wxT("MDI parent frame is not active, yet there is no active MDI child?")); } return false; }
void wxMDIParentFrame::ActivatePrevious() { ::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDINEXT, 0, 1); }
void wxMDIParentFrame::ActivateNext() { ::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDINEXT, 0, 0); }
void wxMDIParentFrame::ArrangeIcons() { ::SendMessage(GetWinHwnd(GetClientWindow()), WM_MDIICONARRANGE, 0, 0); }