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

📄 tbarwce.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/msw/wince/tbarwce.cpp// Purpose:     wxToolBar for Windows CE// Author:      Julian Smart// Modified by:// Created:     2003-07-12// RCS-ID:      $Id: tbarwce.cpp,v 1.35 2006/09/07 19:01:45 ABX Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// ============================================================================// declarations// ============================================================================// ----------------------------------------------------------------------------// headers// ----------------------------------------------------------------------------// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif// Use the WinCE-specific toolbar only if we're either compiling// with a WinCE earlier than 4, or we wish to emulate a PocketPC-style UI#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (_WIN32_WCE < 400 || defined(__POCKETPC__) || defined(__SMARTPHONE__))#include "wx/toolbar.h"#ifndef WX_PRECOMP    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"    #include "wx/dynarray.h"    #include "wx/frame.h"    #include "wx/log.h"    #include "wx/intl.h"    #include "wx/settings.h"    #include "wx/bitmap.h"    #include "wx/dcmemory.h"    #include "wx/control.h"#endif#if !defined(__GNUWIN32__) && !defined(__SALFORDC__)    #include "malloc.h"#endif#include "wx/msw/private.h"#include <windows.h>#include <windowsx.h>#include <tchar.h>#include <ole2.h>#include <shellapi.h>#if defined(WINCE_WITHOUT_COMMANDBAR)  #include <aygshell.h>#endif#include "wx/msw/wince/missing.h"#include "wx/msw/winundef.h"#if !defined(__SMARTPHONE__)///////////// This implementation is for PocketPC.///////////// See later for the Smartphone dummy toolbar class.// ----------------------------------------------------------------------------// Event table// ----------------------------------------------------------------------------IMPLEMENT_DYNAMIC_CLASS(wxToolMenuBar, wxToolBar)BEGIN_EVENT_TABLE(wxToolMenuBar, wxToolBar)END_EVENT_TABLE()// ----------------------------------------------------------------------------// private classes// ----------------------------------------------------------------------------class wxToolMenuBarTool : public wxToolBarToolBase{public:    wxToolMenuBarTool(wxToolBar *tbar,                  int id,                  const wxString& label,                  const wxBitmap& bmpNormal,                  const wxBitmap& bmpDisabled,                  wxItemKind kind,                  wxObject *clientData,                  const wxString& shortHelp,                  const wxString& longHelp)        : wxToolBarToolBase(tbar, id, label, bmpNormal, bmpDisabled, kind,                            clientData, shortHelp, longHelp)    {        m_nSepCount = 0;        m_bitmapIndex = -1;    }    wxToolMenuBarTool(wxToolBar *tbar, wxControl *control)        : wxToolBarToolBase(tbar, control)    {        m_nSepCount = 1;        m_bitmapIndex = -1;    }    virtual void SetLabel(const wxString& label)    {        if ( label == m_label )            return;        wxToolBarToolBase::SetLabel(label);        // we need to update the label shown in the toolbar because it has a        // pointer to the internal buffer of the old label        //        // TODO: use TB_SETBUTTONINFO    }    // set/get the number of separators which we use to cover the space used by    // a control in the toolbar    void SetSeparatorsCount(size_t count) { m_nSepCount = count; }    size_t GetSeparatorsCount() const { return m_nSepCount; }    void SetBitmapIndex(int idx) { m_bitmapIndex = idx; }    int GetBitmapIndex() const { return m_bitmapIndex; }private:    size_t m_nSepCount;    int m_bitmapIndex;};// ============================================================================// implementation// ============================================================================// ----------------------------------------------------------------------------// wxToolBarTool// ----------------------------------------------------------------------------wxToolBarToolBase *wxToolMenuBar::CreateTool(int id,                                         const wxString& label,                                         const wxBitmap& bmpNormal,                                         const wxBitmap& bmpDisabled,                                         wxItemKind kind,                                         wxObject *clientData,                                         const wxString& shortHelp,                                         const wxString& longHelp){    return new wxToolMenuBarTool(this, id, label, bmpNormal, bmpDisabled, kind,                             clientData, shortHelp, longHelp);}wxToolBarToolBase *wxToolMenuBar::CreateTool(wxControl *control){    return new wxToolMenuBarTool(this, control);}// ----------------------------------------------------------------------------// wxToolBar construction// ----------------------------------------------------------------------------void wxToolMenuBar::Init(){    wxToolBar::Init();    m_nButtons = 0;    m_menuBar = NULL;}bool wxToolMenuBar::Create(wxWindow *parent,                       wxWindowID id,                       const wxPoint& pos,                       const wxSize& size,                       long style,                       const wxString& name,                       wxMenuBar* menuBar){    // common initialisation    if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )        return false;    // MSW-specific initialisation    if ( !MSWCreateToolbar(pos, size, menuBar) )        return false;    // set up the colors and fonts    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));    SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));    return true;}bool wxToolMenuBar::MSWCreateToolbar(const wxPoint& WXUNUSED(pos), const wxSize& WXUNUSED(size), wxMenuBar* menuBar){    SetMenuBar(menuBar);    if (m_menuBar)        m_menuBar->SetToolBar(this);#if defined(WINCE_WITHOUT_COMMANDBAR)    // Create the menubar.    SHMENUBARINFO mbi;    memset (&mbi, 0, sizeof (SHMENUBARINFO));    mbi.cbSize     = sizeof (SHMENUBARINFO);    mbi.hwndParent = (HWND) GetParent()->GetHWND();#ifdef __SMARTPHONE__    mbi.nToolBarId = 5002;#else    mbi.nToolBarId = 5000;#endif    mbi.nBmpId     = 0;    mbi.cBmpImages = 0;    mbi.dwFlags = 0 ; // SHCMBF_EMPTYBAR;    mbi.hInstRes = wxGetInstance();    if (!SHCreateMenuBar(&mbi))    {        wxFAIL_MSG( _T("SHCreateMenuBar failed") );        return false;    }    SetHWND((WXHWND) mbi.hwndMB);#else    HWND hWnd = CommandBar_Create(wxGetInstance(), (HWND) GetParent()->GetHWND(), GetId());    SetHWND((WXHWND) hWnd);#endif    // install wxWidgets window proc for this window    SubclassWin(m_hWnd);    if (menuBar)        menuBar->Create();    return true;}void wxToolMenuBar::Recreate(){    // TODO}wxToolMenuBar::~wxToolMenuBar(){    if (GetMenuBar())        GetMenuBar()->SetToolBar(NULL);}// Return HMENU for the menu associated with the commandbarWXHMENU wxToolMenuBar::GetHMenu(){#if defined(__HANDHELDPC__)    return 0;#else    if (GetHWND())    {        return (WXHMENU) (HMENU)::SendMessage((HWND) GetHWND(), SHCMBM_GETMENU, (WPARAM)0, (LPARAM)0);    }    else        return 0;#endif}// ----------------------------------------------------------------------------// adding/removing tools// ----------------------------------------------------------------------------bool wxToolMenuBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool){    // nothing special to do here - we really create the toolbar buttons in    // Realize() later    tool->Attach(this);    return true;}bool wxToolMenuBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool){    // the main difficulty we have here is with the controls in the toolbars:    // as we (sometimes) use several separators to cover up the space used by    // them, the indices are not the same for us and the toolbar    // first determine the position of the first button to delete: it may be    // different from pos if we use several separators to cover the space used    // by a control    wxToolBarToolsList::compatibility_iterator node;    for ( node = m_tools.GetFirst(); node; node = node->GetNext() )    {        wxToolBarToolBase *tool2 = node->GetData();        if ( tool2 == tool )        {            // let node point to the next node in the list            node = node->GetNext();            break;        }        if ( tool2->IsControl() )        {            pos += ((wxToolMenuBarTool *)tool2)->GetSeparatorsCount() - 1;        }    }    // now determine the number of buttons to delete and the area taken by them    size_t nButtonsToDelete = 1;    // get the size of the button we're going to delete    RECT r;    if ( !::SendMessage(GetHwnd(), TB_GETITEMRECT, pos, (LPARAM)&r) )    {        wxLogLastError(_T("TB_GETITEMRECT"));    }    int width = r.right - r.left;    if ( tool->IsControl() )    {        nButtonsToDelete = ((wxToolMenuBarTool *)tool)->GetSeparatorsCount();        width *= nButtonsToDelete;    }    // do delete all buttons    m_nButtons -= nButtonsToDelete;    while ( nButtonsToDelete-- > 0 )

⌨️ 快捷键说明

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