我看了一篇介绍要把Dib位图拷贝到剪贴板得这做:// copydibtoclipboard -拷贝一个DIB到剪贴板中
            // pwnd -剪贴板的指针
            // hdib -包含bitmapinfo和bitmap bits内存句柄
            // ppal -逻辑调色板指针,可能是空的
            // note -位图被拷贝后,剪贴板拥有的bitmap和ppal,它应该被分离
            //
            void copydibtoclipboard( const cwnd *pwnd, hglobal hdib, cpalette* 
            ppal )
            {
            ::openclipboard(pwnd->getsafehwnd());
            ::emptyclipboard();
            if( ppal )
            ::setclipboarddata (cf_palette, ppal->getsafehandle() ) ;
            ::setclipboarddata (cf_dib, hdib ) ;
            ::closeclipboard () ;
            bitmap.detach();
            if( ppal )
            ppal->detach();
            }
但其中的hglobal hdib和cpalette* ppal 要怎么得到呢?,还有那个bitmap是什么,请问有哪位高手比较熟的啊,请指教

解决方案 »

  1.   

    // CopyDibToClipboard-拷贝一个DIB到剪贴板中
    // pWnd -窗口对象指针
    // hDib -位图句柄
    // pPal -逻辑调色板指针,可能是空的
    // 
    void CopyDibToClipboard( const CWnd *pWnd, hGlobal hDib, CPalette* pPal )
    {
         ::OpenClipboard( pWnd->GetSafehWnd() );
         ::EmptyClipboard();
         if( pPal )
         {
            ::SetClipboardData ( CF_PALETTE, pPal->GetSafeHandle() ) ;
            ::SetClipboardData ( CF_DIB , hDib ) ;
            ::CloseclipBoard () ;
    //        bitmap.detach();     // bitmap是什么?声明在哪?
    //        if( pPal )           // 这里为什么要detach,detach应该在此函数调用后再做
    //            pPal->Detach();
          }
    }我把你的函数规则了一下。
    说明:
     Windows的剪贴板是有一定格式的,对于一定的数据要按一定的格式设置。
     你要处理的是位图,具体地说是DIB,设备无关位图。对于一个位图来说,可能有调色板,也可能没有。Windows在剪贴板输出时,会查这个位图有无调色板,如果有就会按调色板显示位图。所以上面的函数设置了位图和调色板信息。
     hDib是个句柄,其实就是个内存地址,指向一个BITMAP结构的指针,BITMAP包含了此位图的详细信息。pPal是调色板对象指针。bitmap我也不知道什么,只能找写此代码的人了。