クリップボードに…

オフスクリーンにレンダリングしたものをクリップボードにコピーしていて,
  5000x5000x4 バイトの CF_BITMAP がうまく動作しない.
原因は Office クリップボードの制限みたいで 8 M まで.
  Office クリップボードにアイテムを追加できない場合の確認事項
無効にして対応.


よくわからないが,以下の様にした.
  CF_METAFILEPICT StretchDIBits
  CF_BITMAP     AlphaBlend
AlphaBlend function (Windows) – TechNet – Microsoft に,
  An error occurs (…) if the source device context identifies an enhanced metafile device context.
コピー画像は,


いろいろやっていて,一度 EMF に吐いて
 ::GetEnhMetaFile(…) で返される HENHMETAFILE を CF_ENHMETAFILE で意図した動作となった.
  {
    CString tmpPath = ::GetTempPath() ;
    tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + _T(“Debug.tmp”) ;
    tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + ::GetFileTitle(::GetModuleFileName()) ;
    CString nowStr = CTime::GetCurrentTime().Format(_T(“%d%H%M%S”)) ;
    CString tmpName = CString(::Path_AddLastSP(tmpPath).c_str()) + nowStr + _T(“.emf”) ;
    ::CreateFolder(tmpPath) ;
    ::ToEMF(dib,tmpName) ;
    HENHMETAFILE hMetaFile = ::GetEnhMetaFile(tmpName) ;
    return hMetaFile ;
    }
    …
   ::SetClipboardData(CF_ENHMETAFILE, hGMemEnhM) ;


今度はメモリメタファイル(第 2 引数を NULL)にして,
  {
    CMetaFileDC mf_DC ;
    BOOL ret = mf_DC.CreateEnhanced(NULL,NULL,NULL,NULL) ;
    ::AlphaBlend (mf_DC.GetSafeHdc(),dRect,dib) ;
    HENHMETAFILE hEnhMetaF = mf_DC.CloseEnhanced() ;
    return hEnhMetaF ;
    }
  CreateEnhanced の幾つかの引数が NULL は知らなかった.
  CreateEnhMetaFile
  Programming Windows 5 18.2.2
  Programming Windows 5


XP 環境のクリップブックや,Word 2003 などでの CF_METAFILEPICT がうまくない.

  {
    CMetaFileDC mf_DC ;
    BOOL ret = mf_DC.Create() ;
    ::StretchDIBits (mf_DC.GetSafeHdc(),dRect,dib) ;
    HMETAFILE hMetaFile = mf_DC.Close() ;
    hGMemMeta = ::GlobalAlloc( GHND, (DWORD) sizeof(METAFILEPICT)) ;
    {
      LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)GlobalLock(hGMemMeta) ;
      lpMFP->mm = MM_TEXT ;
      lpMFP->xExt = dRect.right ;
      lpMFP->yExt = dRect.bottom ;
      lpMFP->hMF = hMetaFile ;
      }
    ::GlobalUnlock(hGMemMeta) ;
    return hGMemMeta ;
    }
StretchDIBits とした.


i_ToDIB

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください