⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynsash_switch.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        contrib/samples/gizmos/dynsash_switch/dynsash_switch.cpp// Purpose:     Test custom scrollbar handling of wxDynamicSashWindow by//              creating a dynamic sash window where the client scrolls a//              a subwindow of the client window by responding to scroll//              events itself// Author:      Matt Kimball// Modified by:// Created:     7/15/2001// RCS-ID:      $Id: dynsash_switch.cpp,v 1.9 2006/02/10 11:59:43 ABX Exp $// Copyright:   (c) 2001 Matt Kimball// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx/wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif// for all others, include the necessary headers (this file is usually all you// need because it includes almost all "standard" wxWidgets headers)#ifndef WX_PRECOMP    #include "wx/wx.h"#endif#include "wx/app.h"#include "wx/frame.h"#include "wx/choice.h"#include "wx/dcclient.h"#include "wx/gizmos/dynamicsash.h"#include "wx/layout.h"#include "wx/scrolbar.h"class SwitchDemo : public wxApp {public:    bool OnInit();};class SwitchView : public wxWindow {public:    SwitchView(wxDynamicSashWindow *parent);    wxSize DoGetBestSize() const;private:    void OnSize(wxSizeEvent& event);    void OnPaint(wxPaintEvent& event);    void OnChoice(wxCommandEvent& event);    void OnScroll(wxScrollEvent& event);    void OnFocus(wxFocusEvent& event);    void OnErase(wxEraseEvent& event);    void OnSplit(wxDynamicSashSplitEvent& event);    void OnUnify(wxDynamicSashUnifyEvent& event);    wxDynamicSashWindow *m_dyn_sash;    wxWindow *m_bar;    wxChoice *m_choice;    wxWindow *m_view;};IMPLEMENT_APP(SwitchDemo)SwitchView::SwitchView(wxDynamicSashWindow *win) {    Create(win, wxID_ANY);    m_dyn_sash = win;    m_bar = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER, wxT("bar"));    m_choice = new wxChoice(m_bar, wxID_ANY);    m_choice->SetEventHandler(this);    m_view = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, wxT("view"));    m_view->SetBackgroundColour(*wxWHITE);    m_view->SetEventHandler(this);    m_choice->Append(wxT("Triangle"));    m_choice->Append(wxT("Square"));    m_choice->SetSelection(0);    wxLayoutConstraints *layout;    layout = new wxLayoutConstraints();    layout->left.Absolute(0);    layout->top.Absolute(0);    layout->height.Absolute(36);    layout->width.SameAs(this, wxWidth);    m_bar->SetConstraints(layout);    layout = new wxLayoutConstraints();    layout->left.Absolute(3);    layout->width.AsIs();    layout->height.AsIs();    layout->top.Absolute(3);    m_choice->SetConstraints(layout);    layout = new wxLayoutConstraints();    layout->left.Absolute(0);    layout->width.SameAs(this, wxWidth);    layout->top.Below(m_bar);    layout->bottom.SameAs(this, wxBottom);    m_view->SetConstraints(layout);    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    hscroll->SetEventHandler(this);    vscroll->SetEventHandler(this);    Connect(GetId(), wxEVT_SIZE, (wxObjectEventFunction)                                 (wxEventFunction)                                 (wxSizeEventFunction)&SwitchView::OnSize);    Connect(m_choice->GetId(), wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction)                                                              (wxEventFunction)                                                              (wxCommandEventFunction)&SwitchView::OnChoice);    Connect(m_view->GetId(), wxEVT_PAINT, (wxObjectEventFunction)                                          (wxEventFunction)                                          (wxPaintEventFunction)&SwitchView::OnPaint);    Connect(wxID_ANY, wxEVT_SET_FOCUS, (wxObjectEventFunction)                                 (wxEventFunction)                                 (wxFocusEventFunction)&SwitchView::OnFocus);    Connect(wxID_ANY, wxEVT_SCROLL_TOP, (wxObjectEventFunction)                                  (wxEventFunction)                                  (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_BOTTOM, (wxObjectEventFunction)                                     (wxEventFunction)                                     (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_LINEUP, (wxObjectEventFunction)                                     (wxEventFunction)                                     (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_LINEDOWN, (wxObjectEventFunction)                                       (wxEventFunction)                                       (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_PAGEUP, (wxObjectEventFunction)                                     (wxEventFunction)                                     (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_PAGEDOWN, (wxObjectEventFunction)                                       (wxEventFunction)                                       (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)                                         (wxEventFunction)                                         (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_SCROLL_THUMBRELEASE, (wxObjectEventFunction)                                           (wxEventFunction)                                           (wxScrollEventFunction)&SwitchView::OnScroll);    Connect(wxID_ANY, wxEVT_ERASE_BACKGROUND, (wxObjectEventFunction)                                        (wxEventFunction)                                        (wxEraseEventFunction)&SwitchView::OnErase);    Connect(wxID_ANY, wxEVT_DYNAMIC_SASH_SPLIT, (wxObjectEventFunction)                                          (wxEventFunction)                                          (wxDynamicSashSplitEventFunction)&SwitchView::OnSplit);    Connect(wxID_ANY, wxEVT_DYNAMIC_SASH_UNIFY, (wxObjectEventFunction)                                          (wxEventFunction)                                          (wxDynamicSashUnifyEventFunction)&SwitchView::OnUnify);}wxSize SwitchView::DoGetBestSize() const {    return wxSize(64, 64);}void SwitchView::OnSize(wxSizeEvent& WXUNUSED(event)) {    Layout();    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    if (hscroll && vscroll) {        int hpos = hscroll->GetThumbPosition();        int vpos = vscroll->GetThumbPosition();        wxSize size = m_view->GetSize();        if (hpos + size.GetWidth() > 300)            hpos = 300 - size.GetWidth();        if (vpos + size.GetHeight() > 300)            vpos = 300 - size.GetHeight();        hscroll->SetScrollbar(hpos, size.GetWidth(), 300, size.GetWidth());        vscroll->SetScrollbar(vpos, size.GetHeight(), 300, size.GetHeight());    }}void SwitchView::OnPaint(wxPaintEvent& WXUNUSED(event)) {    wxPaintDC dc(m_view);    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    dc.Clear();    dc.SetDeviceOrigin(-hscroll->GetThumbPosition(), -vscroll->GetThumbPosition());    if (m_choice->GetSelection()) {        dc.DrawLine(20, 20, 280, 20);        dc.DrawLine(280, 20, 280, 280);        dc.DrawLine(280, 280, 20, 280);        dc.DrawLine(20, 280, 20, 20);    } else {        dc.DrawLine(150, 20, 280, 280);        dc.DrawLine(280, 280, 20, 280);        dc.DrawLine(20, 280, 150, 20);    }}void SwitchView::OnErase(wxEraseEvent& WXUNUSED(event)) {    // Do nothing}void SwitchView::OnSplit(wxDynamicSashSplitEvent& WXUNUSED(event)) {    SwitchView *view = new SwitchView(m_dyn_sash);    view->m_choice->SetSelection(m_choice->GetSelection());    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    hscroll->SetEventHandler(this);    vscroll->SetEventHandler(this);}void SwitchView::OnUnify(wxDynamicSashUnifyEvent& WXUNUSED(event)) {    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    hscroll->SetEventHandler(this);    vscroll->SetEventHandler(this);}void SwitchView::OnChoice(wxCommandEvent& WXUNUSED(event)) {    m_view->Refresh();}void SwitchView::OnScroll(wxScrollEvent& WXUNUSED(event)) {    m_view->Refresh();}void SwitchView::OnFocus(wxFocusEvent& event) {    wxScrollBar *hscroll = m_dyn_sash->GetHScrollBar(this);    wxScrollBar *vscroll = m_dyn_sash->GetVScrollBar(this);    if (event.GetEventObject() == hscroll || event.GetEventObject() == vscroll) {        m_view->SetFocus();    } else {        event.Skip();    }}bool SwitchDemo::OnInit() {    wxFrame *frame;    wxDynamicSashWindow *dyn;    frame = new wxFrame(NULL, wxID_ANY, wxT("Dynamic Sash Window Switch Demo"));    dyn = new wxDynamicSashWindow(frame, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxCLIP_CHILDREN);    new SwitchView(dyn);    frame->SetSize(480, 480);    frame->Show();    return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -