打印对话框中显示的图像——《Visual C++开发实战宝典》,宋坤,清华大学出版社 “12.2.3 打印图像” (P457)

《Visual C++开发实战宝典》,宋坤,清华大学出版社 “12.2.3 打印图像” (P457)


① 程序功能,将应用程序客户区面积m_rect打印出来。客户区的左上角为坐标原点(0,0)。
② 将客户区dc面积为m_rect的区域“ 生成”一个黑色位图(本质上作为遮罩)。
③ 建立客户区dc的兼容内存DC(imagedc)。
④ 将第②步中的黑色位图区域选入内存环境imagedc。
⑤ 将客户区对应于黑色位图的区域“截取”出来。相当于遮罩将下面的图形显示出来。绘制到内存环境imagedc。
⑥ 将内存环境imagedc中的位图输出到打印机。要对位图进行拉缩处理显示。


void CP457Dlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CRect m_rect;
m_Image.GetClientRect(m_rect);
CDC *pImageDC = m_Image.GetDC();
int formx,formy;
formx = pImageDC->GetDeviceCaps(LOGPIXELSX);
formy = pImageDC->GetDeviceCaps(LOGPIXELSY);
ReleaseDC(pImageDC);
CDC *pdc1 = GetDC();
int screenx = pdc1->GetDeviceCaps(LOGPIXELSX);
int screeny = pdc1->GetDeviceCaps(LOGPIXELSY);
CPrintDialog dlg(FALSE,PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);

if (dlg.DoModal()==IDOK)
{
CDC pdc;
pdc.Attach(dlg.GetPrinterDC());
int printx,printy;
printx = pdc.GetDeviceCaps(LOGPIXELSX);
printy = pdc.GetDeviceCaps(LOGPIXELSY);
double ratex,ratey;
ratex = (double)printx/formx;
ratey = (double)printy/formy;
CClientDC   dc(this);
CBitmap bmp;
bmp.CreateCompatibleBitmap( &dc,m_rect.Width(),m_rect.Height()); ②
CDC   imagedc;
imagedc.CreateCompatibleDC(&dc); ③ 
imagedc.SelectObject(&bmp);   ④
imagedc. BitBlt(0,0,m_rect.Width(),m_rect.Height(), &dc,0,0,SRCCOPY); ⑤
pdc.StartDoc("printimage");
pdc. StretchBlt(0,0,m_rect.Width()* ratex,m_rect.Height()* ratey, &imagedc,0,0,m_rect.Width(),m_rect.Height(),SRCCOPY);  ⑥
pdc.EndDoc();

}
}
① 程序功能,将应用程序客户区面积m_rect打印出来。客户区的左上角为坐标原点(0,0)。
② 将客户区dc面积为m_rect的区域“ 生成”一个黑色位图(本质上作为遮罩)。
③ 建立客户区dc的兼容内存DC(imagedc)。
④ 将第②步中的黑色位图区域选入内存环境imagedc。
⑤ 将客户区对应于黑色位图的区域“截取”出来。相当于遮罩将下面的图形显示出来。绘制到内存环境imagedc。
⑥ 将内存环境imagedc中的位图输出到打印机。要对位图进行拉缩处理显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值