打印高手进!已经知道打印机的dc和一个图片的HBITMAP,怎么打印图片?

ygcn 2005-11-17 02:51:13
//创建打印机的dc
HDC hdc = ::CreateDC(strDriverName,strPrinterName,NULL,NULL);

HBITMAP hbit;
//hbit的创建省略,已经验证hbit没有问题

HDC hMemDC = ::CreateCompatibleDC(hdc);
HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC,hbit);

if (StartDoc(hdc,&di) != SP_ERROR)
{
StartPage(hdc);
::BitBlt(hdc,0,0,nWidth,nHeight,
hMemDC,0,0,SRCCOPY);
TextOut(hdc,10,10,"aaaaaaaaaaa",18);
EndPage(hdc);
EndDoc(hdc);
}

aaaaaaaa能打印出来,但是图不能出来,什么问题啊?
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobob 2005-11-22
  • 打赏
  • 举报
回复
如果aaaaaa能出来,那问题就出在
::BitBlt(hdc,0,0,nWidth,nHeight,hMemDC,0,0,SRCCOPY);
上.不要以为打印dc和屏幕dc是一样的,其实不一样,差别还很大.

1.如果bitblt不能成功,那么stretchblt也一样不会成功;
2.和nWidth 以及nHeight没有关系;
3.和memdc选入的Bitmap的大小有关(好象大概是不能超过1024*1024).

解决办法:先创建一个合理大小的bitmap选入memdc,然后分割hbitmap,分块bitblt或stretchblt
ukyoking 2005-11-22
  • 打赏
  • 举报
回复
StretchDIBits
SeekTruth 2005-11-17
  • 打赏
  • 举报
回复
往打印机的DC上画就行了
菜牛 2005-11-17
  • 打赏
  • 举报
回复
那你得看看nWidth,nHeight是否正确。

建议用StretchBlt打印。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧