返回介绍

DrawToDc

发布于 2023-08-09 23:10:33 字数 4572 浏览 0 评论 0 收藏 0

函数名:DrawToDc function

作用:绘制CAD控件当前图形中指定区域到CDC对象中。

参数

名称说明
hOcx标识控件的句柄
pDC把指定区域的图形中的内容绘制到pDC上
iDCx, iDCy绘制pDC的左上角位置
iDCWidth,iDCHeight绘制到pDC上的宽度和高度
dLbx, dLby指定图形区域的左下角坐标
dRtx, dRty指定图形区域的右下角坐标

VC调用参考例程

void CTestCommands::DrawToBmp()
{
// 选择让用从图上选择个存位图的区域。
acutPrintf(_T("\n 请点取存位图的区域:"));
 
// 动态拖放输入,让用户确定要保存的区域
CRectSelJig getRect;

// pt1,pt2是矩形框的两点
AcGePoint3d pt1,pt2;
if(!getRect.DoIt(pt1,pt2) )
return;
 
// 让用户选择保存的位图文件.
CTestDlg* pDlg = (CTestDlg*)AfxGetApp()->GetMainWnd();
CFileDialog openDlg(FALSE,_T("bmp"),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("bmp(*.bmp) | *.bmp||"),
pDlg);
 
CString sFileName;
if(openDlg.DoModal() == IDOK)
{
sFileName = openDlg.GetPathName();
}
else
{
return;
}
 
int iBmpWidth  = 1000;
int iBmpHeight = 500;
 
// 开始保存文件.
CDC dc;
dc.Attach(::GetDC(NULL));
 
CBitmap bm;
bm.CreateCompatibleBitmap(&dc,iBmpWidth,iBmpHeight);
 
CDC tmpDc;
tmpDc.CreateCompatibleDC(&dc);
CBitmap*pOld = tmpDc.SelectObject(&bm);
 
if(MxDraw::DrawToDc(MxDraw::GetCurOcxHandle(),
&tmpDc,0,0,iBmpWidth,iBmpHeight,
pt1.x,pt1.y,pt2.x,pt2.y
)
)
{
tmpDc.SelectObject(pOld);
if(SaveBmp(&bm,&dc,sFileName) )
{
AfxMessageBox(_T("保存成功"));
}
else
{
AfxMessageBox(_T("保存失败"));
}
 
}
else
{
AfxMessageBox(_T("未知原因,保存失败"));
tmpDc.SelectObject(pOld);
}
}
 
 
bool CTestCommands::SaveBmp(CBitmap* pBmp,CDC* pDc,const CString& sBmpFilePath)
{
if(sBmpFilePath.IsEmpty() )
{
AfxMessageBox(_T("文件路径为空"));
return false;
}
BITMAP btm;
pBmp->GetBitmap(&btm);
 
DWORD size   = btm.bmWidthBytes * btm.bmHeight;
LPSTR lpData = (LPSTR)GlobalAlloc(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
///////////////////////////////////
GetDIBits(pDc->GetSafeHdc(),*pBmp,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
 
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
bool isSuc = false;
CFile bf;
if(bf.Open(sBmpFilePath,CFile::modeCreate|CFile::modeWrite))
{
bf.Write(&bfh,sizeof(BITMAPFILEHEADER));
bf.Write(&bih,sizeof(BITMAPINFOHEADER));
bf.Write(lpData,size);
bf.Close();
isSuc = true;
}
else
{
AfxMessageBox(_T("创建文件失败"));
}
GlobalFree(lpData);
return isSuc;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文