我将一张256色的位图想放到剪贴板上,以下是主要代码,什么我粘贴的图总是一个黑框呢,不解?求救BITMAPINFOHEADER bmiHeader;
bmiHeader.biWidth = m_width;
bmiHeader.biHeight = m_height;
bmiHeader.biPlanes = 1;
bmiHeader.biBitCount = 8;
bmiHeader.biCompression = BI_RGB;
bmiHeader.biSizeImage = 0;
bmiHeader.biXPelsPerMeter = 0;
bmiHeader.biYPelsPerMeter = 0;
bmiHeader.biClrUsed = 256;
bmiHeader.biClrImportant = 0;
CBitmap* g2=new CBitmap();
g2->CreateBitmap(bmiHeader.biWidth,bmiHeader.biHeight,bmiHeader.biPlanes,8,tmp);
 // tmp 为图象数据指针
HWND hWnd = GetSafeHwnd(); // 获取安全窗口句柄
::OpenClipboard(hWnd); // 打开剪贴板
::EmptyClipboard();
if(pPal)
  ::SetClipboardData(CF_PALETTE,pPal->GetSafeHandle());  ::SetClipboardData(CF_BITMAP,g2->GetSafeHandle()); 
::CloseClipboard(); 
    pPal->Detach();

解决方案 »

  1.   

    可能是你的位图数据有问题,
    tmp
      

  2.   

    // tmp 为图象数据指针
     LpvBits:指向颜色数据数组指针。这些颜色数据用来设置矩形区域内像素的颜色。矩形区域中的每一扫描线必须是双字节的整数倍(不足部分以0填充)。如果该参数为NULL,那么就表示没有定义新位图。
        备注:在创建完位图之后,可以通过使用SeletObject函数把它选入到设备环境中。尽管函数CreateBitmap可以用来创建彩色位图,但由于性能方面的原因,应用程序使用CreateBitmap函数来创建单位色位图,创建彩色位图应该使用函数CreateCompatibleBitmap。当由CreateBitmap创建而返回的彩色位图被选入到设备环境时,系统必须确保选入进去的设备环境格式与位图匹配。由于函数CreateComapatbleBitmap获取设备环境,所以它返回的位图与指定的设备环境有相同的格式。由于这个原因,对SelectObject的后续调用都要比从CreateBitmap函数创建返回的彩色位图调用快。参考:
    http://www.laowen.com/Article/ShowArticle.asp?ArticleID=88
      

  3.   

    http://blog.csdn.net/lixiaosan/archive/2006/04/14/663477.aspx