我用CDC写的显示图片的OCX控件,显示正常;但是用OLE嵌入Powerbuilder(任何版本我都试过)的数据窗口对象里面后程序里能正常看见,但打印不了OCX里面的图片,经过调试发现在powerbuilder里面图片和控件是分开的。当用代码移动ole控件时里面的图片不动,当用代码移动数据窗口时图片还是不动。
有什么办法解决这问题,显示bmp图片有多少种方法,救我,分不够再给
部分代码如下:
// TODO: Add your dispatch handler code here
//读取磁盘元文件,建立一个新的原文件句柄
HENHMETAFILE MetaFileHandle = GetEnhMetaFile(LoadFileName); if(!MetaFileHandle) return FALSE;
//获取图元文件尺寸信息
ENHMETAHEADER  enhMetaHeader; GetEnhMetaFileHeader(MetaFileHandle,255,&enhMetaHeader); CRect MetaRect;
MetaRect.left=enhMetaHeader.rclBounds.left;
MetaRect.right=enhMetaHeader.rclBounds.right;
MetaRect.top=enhMetaHeader.rclBounds.top;
MetaRect.bottom=enhMetaHeader.rclBounds.bottom; CClientDC dc(this); CDC* pDC;
pDC=new CDC;
pDC->CreateCompatibleDC(&dc);
CBitmap cBitmap;
CBitmap* pOldBmp=NULL;
cBitmap.CreateCompatibleBitmap(&dc,MetaRect.Width(),MetaRect.Height());
pOldBmp=pDC->SelectObject(&cBitmap); pDC->FillSolidRect(0,0,MetaRect.Width(),MetaRect.Height(),RGB(255,255,255));

pDC->PlayMetaFile(MetaFileHandle,MetaRect); paintDC->StretchBlt(0,0,CtrlRect.Width(),CtrlRect.Height(),pDC,0,0,MetaRect.Width(),MetaRect.Height(),SRCCOPY);
CRect rcClock, rcAlarm;
// bResult = GetClockRect(RT_ALARM, rcBounds, rcAlarm);
pDC->DrawText("strAlarm", rcAlarm, DT_WORDBREAK);
   // pDC->PrintClient(&dc,PRF_ERASEBKGND   );
if(pOldBmp) pDC->SelectObject(pOldBmp);
delete pDC; //刷新视图
Invalidate(); //建立一个新的元文件
CMetaFileDC* TempMetaFile = new CMetaFileDC();

TempMetaFile->CreateEnhanced(NULL,NULL,NULL,NULL); //将从磁盘读取的元文件放入新的元文件中
TempMetaFile->PlayMetaFile(MetaFileHandle,MetaRect);

//删除旧的元文件
DeleteEnhMetaFile(MetaFileHandle);
delete g_pMetaFileDC[CtrlCount];
g_pMetaFileDC[CtrlCount] = TempMetaFile; m_b=true; if(isDel)
{
::DeleteFile(LoadFileName);
}