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

📄 win32.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/univ/themes/win32.cpp// Purpose:     wxUniversal theme implementing Win32-like LNF// Author:      Vadim Zeitlin// Modified by:// Created:     06.08.00// RCS-ID:      $Id: win32.cpp,v 1.102 2006/10/30 12:33:25 VS Exp $// Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)// Licence:     wxWindows licence///////////////////////////////////////////////////////////////////////////////// ===========================================================================// declarations// ===========================================================================// ---------------------------------------------------------------------------// headers// ---------------------------------------------------------------------------// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/univ/theme.h"#if wxUSE_THEME_WIN32#ifndef WX_PRECOMP    #include "wx/timer.h"    #include "wx/intl.h"    #include "wx/dc.h"    #include "wx/window.h"    #include "wx/dcmemory.h"    #include "wx/button.h"    #include "wx/bmpbuttn.h"    #include "wx/listbox.h"    #include "wx/checklst.h"    #include "wx/combobox.h"    #include "wx/scrolbar.h"    #include "wx/slider.h"    #include "wx/textctrl.h"    #include "wx/toolbar.h"    #include "wx/statusbr.h"    #ifdef __WXMSW__        // for COLOR_* constants        #include "wx/msw/private.h"    #endif    #include "wx/menu.h"    #include "wx/settings.h"    #include "wx/toplevel.h"    #include "wx/image.h"#endif // WX_PRECOMP#include "wx/notebook.h"#include "wx/spinbutt.h"#include "wx/artprov.h"#ifdef wxUSE_TOGGLEBTN#include "wx/tglbtn.h"#endif // wxUSE_TOGGLEBTN#include "wx/univ/scrtimer.h"#include "wx/univ/stdrend.h"#include "wx/univ/inpcons.h"#include "wx/univ/inphand.h"#include "wx/univ/colschem.h"// ----------------------------------------------------------------------------// constants// ----------------------------------------------------------------------------static const int BORDER_THICKNESS = 2;static const size_t NUM_STATUSBAR_GRIP_BANDS = 3;static const size_t WIDTH_STATUSBAR_GRIP_BAND = 4;static const size_t STATUSBAR_GRIP_SIZE =    WIDTH_STATUSBAR_GRIP_BAND*NUM_STATUSBAR_GRIP_BANDS;static const wxCoord SLIDER_MARGIN = 6; // margin around sliderstatic const wxCoord SLIDER_THUMB_LENGTH = 18;static const wxCoord SLIDER_TICK_LENGTH = 6;// wxWin32Renderer: draw the GUI elements in Win32 style// ----------------------------------------------------------------------------class wxWin32Renderer : public wxStdRenderer{public:    // ctor    wxWin32Renderer(const wxColourScheme *scheme);    // reimplement the renderer methods which are different for this theme    virtual void DrawLabel(wxDC& dc,                           const wxString& label,                           const wxRect& rect,                           int flags = 0,                           int alignment = wxALIGN_LEFT | wxALIGN_TOP,                           int indexAccel = -1,                           wxRect *rectBounds = NULL);    virtual void DrawButtonLabel(wxDC& dc,                                 const wxString& label,                                 const wxBitmap& image,                                 const wxRect& rect,                                 int flags = 0,                                 int alignment = wxALIGN_LEFT | wxALIGN_TOP,                                 int indexAccel = -1,                                 wxRect *rectBounds = NULL);    virtual void DrawButtonBorder(wxDC& dc,                                  const wxRect& rect,                                  int flags = 0,                                  wxRect *rectIn = NULL);    virtual void DrawArrow(wxDC& dc,                           wxDirection dir,                           const wxRect& rect,                           int flags = 0);    virtual void DrawScrollbarThumb(wxDC& dc,                                    wxOrientation orient,                                    const wxRect& rect,                                    int flags = 0);    virtual void DrawScrollbarShaft(wxDC& dc,                                    wxOrientation orient,                                    const wxRect& rect,                                    int flags = 0);#if wxUSE_TOOLBAR    virtual void DrawToolBarButton(wxDC& dc,                                   const wxString& label,                                   const wxBitmap& bitmap,                                   const wxRect& rect,                                   int flags = 0,                                   long style = 0,                                   int tbarStyle = 0);#endif // wxUSE_TOOLBAR#if wxUSE_NOTEBOOK    virtual void DrawTab(wxDC& dc,                         const wxRect& rect,                         wxDirection dir,                         const wxString& label,                         const wxBitmap& bitmap = wxNullBitmap,                         int flags = 0,                         int indexAccel = -1);#endif // wxUSE_NOTEBOOK#if wxUSE_SLIDER    virtual void DrawSliderShaft(wxDC& dc,                                 const wxRect& rect,                                 int lenThumb,                                 wxOrientation orient,                                 int flags = 0,                                 long style = 0,                                 wxRect *rectShaft = NULL);    virtual void DrawSliderThumb(wxDC& dc,                                 const wxRect& rect,                                 wxOrientation orient,                                 int flags = 0,                                 long style = 0);    virtual void DrawSliderTicks(wxDC& dc,                                 const wxRect& rect,                                 int lenThumb,                                 wxOrientation orient,                                 int start,                                 int end,                                 int step = 1,                                 int flags = 0,                                 long style = 0);#endif // wxUSE_SLIDER#if wxUSE_MENUS    virtual void DrawMenuBarItem(wxDC& dc,                                 const wxRect& rect,                                 const wxString& label,                                 int flags = 0,                                 int indexAccel = -1);    virtual void DrawMenuItem(wxDC& dc,                              wxCoord y,                              const wxMenuGeometryInfo& geometryInfo,                              const wxString& label,                              const wxString& accel,                              const wxBitmap& bitmap = wxNullBitmap,                              int flags = 0,                              int indexAccel = -1);    virtual void DrawMenuSeparator(wxDC& dc,                                   wxCoord y,                                   const wxMenuGeometryInfo& geomInfo);#endif // wxUSE_MENUS#if wxUSE_STATUSBAR    virtual void DrawStatusField(wxDC& dc,                                 const wxRect& rect,                                 const wxString& label,                                 int flags = 0, int style = 0);#endif // wxUSE_STATUSBAR    virtual void GetComboBitmaps(wxBitmap *bmpNormal,                                 wxBitmap *bmpFocus,                                 wxBitmap *bmpPressed,                                 wxBitmap *bmpDisabled);    virtual void AdjustSize(wxSize *size, const wxWindow *window);    virtual bool AreScrollbarsInsideBorder() const;    virtual wxSize GetScrollbarArrowSize() const        { return m_sizeScrollbarArrow; }    virtual wxSize GetCheckBitmapSize() const        { return wxSize(13, 13); }    virtual wxSize GetRadioBitmapSize() const        { return wxSize(12, 12); }    virtual wxCoord GetCheckItemMargin() const        { return 0; }#if wxUSE_TOOLBAR    virtual wxSize GetToolBarButtonSize(wxCoord *separator) const        { if ( separator ) *separator = 5; return wxSize(16, 15); }    virtual wxSize GetToolBarMargin() const        { return wxSize(4, 4); }#endif // wxUSE_TOOLBAR#if wxUSE_TEXTCTRL    virtual wxRect GetTextTotalArea(const wxTextCtrl *text,                                    const wxRect& rect) const;    virtual wxRect GetTextClientArea(const wxTextCtrl *text,                                     const wxRect& rect,                                     wxCoord *extraSpaceBeyond) const;#endif // wxUSE_TEXTCTRL#if wxUSE_NOTEBOOK    virtual wxSize GetTabIndent() const { return wxSize(2, 2); }    virtual wxSize GetTabPadding() const { return wxSize(6, 5); }#endif // wxUSE_NOTEBOOK#if wxUSE_SLIDER    virtual wxCoord GetSliderDim() const { return SLIDER_THUMB_LENGTH + 2*BORDER_THICKNESS; }    virtual wxCoord GetSliderTickLen() const { return SLIDER_TICK_LENGTH; }    virtual wxRect GetSliderShaftRect(const wxRect& rect,                                      int lenThumb,                                      wxOrientation orient,                                      long style = 0) const;    virtual wxSize GetSliderThumbSize(const wxRect& rect,                                      int lenThumb,                                      wxOrientation orient) const;#endif // wxUSE_SLIDER    virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); }#if wxUSE_MENUS    virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const;    virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,                                                const wxMenu& menu) const;#endif // wxUSE_MENUSprotected:    // overridden wxStdRenderer methods    virtual void DrawFrameWithLabel(wxDC& dc,                                    const wxString& label,                                    const wxRect& rectFrame,                                    const wxRect& rectText,                                    int flags,                                    int alignment,                                    int indexAccel);    virtual void DrawCheckItemBitmap(wxDC& dc,                                     const wxBitmap& bitmap,                                     const wxRect& rect,                                     int flags);    // draw the border used for scrollbar arrows    void DrawArrowBorder(wxDC& dc, wxRect *rect, bool isPressed = false);    // public DrawArrow()s helper    void DrawArrow(wxDC& dc, const wxRect& rect,                   ArrowDirection arrowDir, ArrowStyle arrowStyle);    // DrawArrowButton is used by DrawScrollbar and DrawComboButton    void DrawArrowButton(wxDC& dc, const wxRect& rect,                         ArrowDirection arrowDir,                         ArrowStyle arrowStyle);    // draw a normal or transposed line (useful for using the same code fo both    // horizontal and vertical widgets)    void DrawLine(wxDC& dc,                  wxCoord x1, wxCoord y1,                  wxCoord x2, wxCoord y2,                  bool transpose = false)    {        if ( transpose )            dc.DrawLine(y1, x1, y2, x2);        else            dc.DrawLine(x1, y1, x2, y2);    }    // get the standard check/radio button bitmap    wxBitmap GetIndicator(IndicatorType indType, int flags);    virtual wxBitmap GetCheckBitmap(int flags)        { return GetIndicator(IndicatorType_Check, flags); }    virtual wxBitmap GetRadioBitmap(int flags)        { return GetIndicator(IndicatorType_Radio, flags); }    virtual wxBitmap GetFrameButtonBitmap(FrameButtonType type);private:    // the sizing parameters (TODO make them changeable)    wxSize m_sizeScrollbarArrow;    // the checked and unchecked bitmaps for DrawCheckItemBitmap()    wxBitmap m_bmpCheckBitmaps[IndicatorStatus_Max];    // the bitmaps returned by GetIndicator()    wxBitmap m_bmpIndicators[IndicatorType_Max]                            [IndicatorState_MaxMenu]                            [IndicatorStatus_Max];    // titlebar icons:    wxBitmap m_bmpFrameButtons[FrameButton_Max];    // standard defaults for the above bitmaps    static const char **ms_xpmChecked[IndicatorStatus_Max];    static const char **ms_xpmIndicators[IndicatorType_Max]                                        [IndicatorState_MaxMenu]                                        [IndicatorStatus_Max];    static const char **ms_xpmFrameButtons[FrameButton_Max];    // first row is for the normal state, second - for the disabled    wxBitmap m_bmpArrows[Arrow_StateMax][Arrow_Max];};// ----------------------------------------------------------------------------// wxWin32InputHandler and derived classes: process the keyboard and mouse// messages according to Windows standards// ----------------------------------------------------------------------------class wxWin32InputHandler : public wxInputHandler{public:    wxWin32InputHandler() { }    virtual bool HandleKey(wxInputConsumer *control,                           const wxKeyEvent& event,                           bool pressed);    virtual bool HandleMouse(wxInputConsumer *control,                             const wxMouseEvent& event);};#if wxUSE_SCROLLBARclass wxWin32ScrollBarInputHandler : public wxStdScrollBarInputHandler{public:    wxWin32ScrollBarInputHandler(wxRenderer *renderer,                                 wxInputHandler *handler);    virtual bool HandleMouse(wxInputConsumer *control,                             const wxMouseEvent& event);    virtual bool HandleMouseMove(wxInputConsumer *control,                                 const wxMouseEvent& event);    virtual bool OnScrollTimer(wxScrollBar *scrollbar,                               const wxControlAction& action);protected:    virtual void Highlight(wxScrollBar * WXUNUSED(scrollbar),                           bool WXUNUSED(doIt))    {        // we don't highlight anything    }    // the first and last event which caused the thumb to move    wxMouseEvent m_eventStartDrag,                 m_eventLastDrag;    // have we paused the scrolling because the mouse moved?    bool m_scrollPaused;    // we remember the interval of the timer to be able to restart it    int m_interval;};#endif // wxUSE_SCROLLBAR#if wxUSE_CHECKBOXclass wxWin32CheckboxInputHandler : public wxStdInputHandler{public:    wxWin32CheckboxInputHandler(wxInputHandler *handler)        : wxStdInputHandler(handler) { }    virtual bool HandleKey(wxInputConsumer *control,                           const wxKeyEvent& event,                           bool pressed);};#endif // wxUSE_CHECKBOX#if wxUSE_TEXTCTRLclass wxWin32TextCtrlInputHandler : public wxStdInputHandler{public:    wxWin32TextCtrlInputHandler(wxInputHandler *handler)        : wxStdInputHandler(handler) { }    virtual bool HandleKey(wxInputConsumer *control,                           const wxKeyEvent& event,                           bool pressed);};#endif // wxUSE_TEXTCTRLclass wxWin32StatusBarInputHandler : public wxStdInputHandler{public:    wxWin32StatusBarInputHandler(wxInputHandler *handler);    virtual bool HandleMouse(wxInputConsumer *consumer,                             const wxMouseEvent& event);    virtual bool HandleMouseMove(wxInputConsumer *consumer,                                 const wxMouseEvent& event);protected:    // is the given point over the statusbar grip?    bool IsOnGrip(wxWindow *statbar, const wxPoint& pt) const;private:    // the cursor we had replaced with the resize one    wxCursor m_cursorOld;    // was the mouse over the grip last time we checked?    bool m_isOnGrip;};class wxWin32SystemMenuEvtHandler;class wxWin32FrameInputHandler : public wxStdInputHandler{public:    wxWin32FrameInputHandler(wxInputHandler *handler);    virtual ~wxWin32FrameInputHandler();    virtual bool HandleMouse(wxInputConsumer *control,                             const wxMouseEvent& event);    virtual bool HandleActivation(wxInputConsumer *consumer, bool activated);#if wxUSE_MENUS    void PopupSystemMenu(wxTopLevelWindow *window) const;

⌨️ 快捷键说明

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