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

📄 dataobj.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/mac/classic/dataobj.cpp// Purpose:     implementation of wxDataObject class// Author:      Stefan Csomor// Modified by:// Created:     10/21/99// RCS-ID:      $Id: dataobj.cpp,v 1.8 2006/07/27 12:57:04 ABX Exp $// Copyright:   (c) 1999 Stefan Csomor// Licence:     wxWindows licence///////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif// ============================================================================// declarations// ============================================================================// ----------------------------------------------------------------------------// headers// ----------------------------------------------------------------------------#include "wx/dataobj.h"#ifndef WX_PRECOMP    #include "wx/intl.h"    #include "wx/log.h"    #include "wx/image.h"#endif#include "wx/mstream.h"#include "wx/mac/private.h"#include <Scrap.h>// ----------------------------------------------------------------------------// functions// ----------------------------------------------------------------------------// ----------------------------------------------------------------------------// wxDataFormat// ----------------------------------------------------------------------------wxDataFormat::wxDataFormat(){    m_type = wxDF_INVALID;    m_format = 0;}wxDataFormat::wxDataFormat(  wxDataFormatId   vType ){    SetType(vType);}wxDataFormat::wxDataFormat(  const wxChar*  zId){    SetId(zId);}wxDataFormat::wxDataFormat(  const wxString&   rId){    SetId(rId);}wxDataFormat::wxDataFormat( NativeFormat vFormat){    SetId(vFormat);}void wxDataFormat::SetType(  wxDataFormatId  Type ){    m_type = Type;    if (m_type == wxDF_TEXT )        m_format = kScrapFlavorTypeText;    else if (m_type == wxDF_UNICODETEXT )        m_format = kScrapFlavorTypeUnicode ;    else if (m_type == wxDF_BITMAP || m_type == wxDF_METAFILE )        m_format = kScrapFlavorTypePicture;    else if (m_type == wxDF_FILENAME)        m_format = kDragFlavorTypeHFS ;    else    {       wxFAIL_MSG( wxT("invalid dataformat") );       // this is '????' but it can't be used in the code because ??' is       // parsed as a trigraph!       m_format = 0x3f3f3f3f;    }}wxString wxDataFormat::GetId() const{    // note that m_format is not a pointer to string, it *is* itself a 4    // character string    char text[5] ;    strncpy( text , (char*) &m_format , 4 ) ;    text[4] = 0 ;    return wxString::FromAscii( text ) ;}void wxDataFormat::SetId(  NativeFormat  format ){    m_format = format;    if (m_format == kScrapFlavorTypeText)        m_type = wxDF_TEXT;    else if (m_format == kScrapFlavorTypeUnicode )        m_type = wxDF_UNICODETEXT;    else if (m_format == kScrapFlavorTypePicture)        m_type = wxDF_BITMAP;    else if (m_format == kDragFlavorTypeHFS )        m_type = wxDF_FILENAME;    else        m_type = wxDF_PRIVATE;}void wxDataFormat::SetId( const wxChar* zId ){    m_type = wxDF_PRIVATE;    m_format = 0;// TODO: get the format gdk_atom_intern( wxMBSTRINGCAST tmp.mbc_str(), FALSE );}//-------------------------------------------------------------------------// wxDataObject//-------------------------------------------------------------------------wxDataObject::wxDataObject(){}bool wxDataObject::IsSupportedFormat(  const wxDataFormat&               rFormat, Direction                         vDir) const{    size_t                          nFormatCount = GetFormatCount(vDir);    if (nFormatCount == 1)    {        return rFormat == GetPreferredFormat();    }    else    {        wxDataFormat* pFormats = new wxDataFormat[nFormatCount];        GetAllFormats( pFormats                      ,vDir                     );        size_t                      n;        for (n = 0; n < nFormatCount; n++)        {            if (pFormats[n] == rFormat)                break;        }        delete [] pFormats;        // found?        return n < nFormatCount;    }}// ----------------------------------------------------------------------------// wxFileDataObject// ----------------------------------------------------------------------------bool wxFileDataObject::GetDataHere( void* pBuf ) const{    wxString sFilenames;    for (size_t i = 0; i < m_filenames.GetCount(); i++)    {        sFilenames += m_filenames[i];        sFilenames += (wxChar)0;    }    memcpy(pBuf, sFilenames.mbc_str(), sFilenames.length() + 1);    return true;}size_t wxFileDataObject::GetDataSize() const{    size_t nRes = 0;    for (size_t i = 0; i < m_filenames.GetCount(); i++)    {        nRes += m_filenames[i].length();        nRes += 1;    }    return nRes + 1;}bool wxFileDataObject::SetData(  size_t                            WXUNUSED(nSize), const void*                       pBuf){    m_filenames.Empty();    AddFile(wxString::FromAscii((char*)pBuf));    return true;}void wxFileDataObject::AddFile(  const wxString&                   rFilename){    m_filenames.Add(rFilename);}// ----------------------------------------------------------------------------// wxBitmapDataObject// ----------------------------------------------------------------------------wxBitmapDataObject::wxBitmapDataObject(){    Init();}wxBitmapDataObject::wxBitmapDataObject(  const wxBitmap& rBitmap): wxBitmapDataObjectBase(rBitmap){    Init();    if ( m_bitmap.Ok() )    {        m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ;    }}wxBitmapDataObject::~wxBitmapDataObject(){    Clear();}void wxBitmapDataObject::SetBitmap(  const wxBitmap&                   rBitmap){    Clear();    wxBitmapDataObjectBase::SetBitmap(rBitmap);    if ( m_bitmap.Ok() )    {        m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ;    }}void wxBitmapDataObject::Init(){    m_pictHandle = NULL ;    m_pictCreated = false ;}void wxBitmapDataObject::Clear(){    if ( m_pictCreated && m_pictHandle )    {        KillPicture( (PicHandle) m_pictHandle ) ;    }    m_pictHandle = NULL ;}bool wxBitmapDataObject::GetDataHere( void* pBuf ) const{    if (!m_pictHandle)    {        wxFAIL_MSG(wxT("attempt to copy empty bitmap failed"));        return false;    }    memcpy(pBuf, *(Handle)m_pictHandle, GetHandleSize((Handle)m_pictHandle));    return true;}size_t wxBitmapDataObject::GetDataSize() const{    return GetHandleSize((Handle)m_pictHandle) ;}bool wxBitmapDataObject::SetData(  size_t                            nSize, const void*                       pBuf){    Clear();    PicHandle picHandle = (PicHandle) NewHandle( nSize ) ;    memcpy( *picHandle , pBuf , nSize ) ;    m_pictHandle = picHandle ;    m_pictCreated = false ;    Rect frame = (**picHandle).picFrame ;    m_bitmap.SetPict( picHandle ) ;    m_bitmap.SetWidth( frame.right - frame.left ) ;    m_bitmap.SetHeight( frame.bottom - frame.top ) ;    return m_bitmap.Ok();}

⌨️ 快捷键说明

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