我看了一篇介绍要把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是什么,请问有哪位高手比较熟的啊,请指教
// 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是什么,请问有哪位高手比较熟的啊,请指教
// 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我也不知道什么,只能找写此代码的人了。