100分求救,照片和文字一起打印的问题,只打出文字了,没有了照片,附源代码

mybios 2004-10-20 02:46:31
void CFormViewMountInfo::OnPrintMount(CDC* pDC, CPrintInfo* pInfo)
{
int nWidth=pDC->GetDeviceCaps(HORZRES); //宽度的象素
int nHeight=pDC->GetDeviceCaps(VERTRES); //高度的象素
m_ghdf = pDC->GetDeviceCaps(LOGPIXELSY); //每英寸的象素
// TODO: Add your specialized code here and/or call the base class
{
CFont font,*oldfont;
//创建字体
font.CreateFont(-GetLen(4),
0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,
OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
VARIABLE_PITCH|FF_SWISS,_T("黑体"));
oldfont=pDC->SelectObject(&font);
//画文字
CString strYear;
strYear.Format("%d" , m_MakeYear);
pDC->TextOut(GetLen(38) ,GetLen(9) , strYear); //车牌
pDC->TextOut(GetLen(8) ,GetLen(44.4) , m_PersonName); //姓名
pDC->TextOut(GetLen(48) ,GetLen(37) , m_MountID); //上岗证编号
pDC->TextOut(GetLen(48) ,GetLen(44) , m_CarNumber); //车牌
//释放字体
pDC->SelectObject(oldfont);
font.DeleteObject();
}

{
//画照片
CRect lRect;
m_pic.GetClientRect(&lRect);
lRect.NormalizeRect();

//获取图片格式
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(m_pic.hbmp);

m_pic.GetClientRect(&lRect);
lRect.NormalizeRect();
pDC->SetStretchBltMode(COLORONCOLOR);
//显示位图
pDC->StretchBlt(GetLen(3) ,GetLen(11) ,GetLen(23),GetLen(31.2),
&dcMem,0 ,0,m_pic.bm.bmWidth,m_pic.bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);
}

//CFormView::OnPrint(pDC, pInfo);
}
...全文
269 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mybios 2004-10-22
  • 打赏
  • 举报
回复
再问一问。
HBITMAPhbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),strFileName,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE); //读取BMP文件
CBitmap hbmp;
if(hbitmap)
{
hbmp.DeleteObject();
hbmp.Attach(hbitmap);
hbmp.GetBitmap(&bm);
}
我用这样一段代码读入了BMP文件保存倒一个hbmp成员变量中,怎么直接使其变成dcMem的兼容bitmap?
mybios 2004-10-22
  • 打赏
  • 举报
回复
谢谢bobob兄。我先试试。。
既然我没有创建内存兼容bitmap,那为什么打印预览中又能正确的显示图片,但是就是打印的时候就不出来了?
bobob 2004-10-22
  • 打赏
  • 举报
回复
还有,不用考虑 nuaawenlin(飘人) ( ) 信誉:100 说的情况了,因为字能出来就没有这个问题
bobob 2004-10-22
  • 打赏
  • 举报
回复
//获取图片格式
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(m_pic.hbmp);

我这里不是有了这个语句吗?
只是我用的是静态变量,您用的是指针变量罢了。
////////////////////////

不仅要创建内存兼容dc,还要创建内存兼容bitmap,楼住再仔细看你的代码吧
mybios 2004-10-22
  • 打赏
  • 举报
回复
to:nuaawenlin(飘人)
我的函数GetLen()已经计算出打印时需要的象素了。

to:doughlus(lman)
那请问怎么取得打印机的DC?
nuaawenlin 2004-10-22
  • 打赏
  • 举报
回复
pDC->StretchBlt(GetLen(3) ,GetLen(11) ,GetLen(23),GetLen(31.2),
&dcMem,0 ,0,m_pic.bm.bmWidth,m_pic.bm.bmHeight,SRCCOPY);

GetLen(3) ,GetLen(11) ,GetLen(23),GetLen(31.2),

这些返回值是多少

使用打印机的时候,它的分辨率是屏幕的很多倍,要和打印机一致才行

多半是图形已经出来了,可能是太小的缘故吧
hobby_hobby 2004-10-22
  • 打赏
  • 举报
回复
听上去很有道理,顶!
mybios 2004-10-21
  • 打赏
  • 举报
回复
怎么没人回答了?
doughlus 2004-10-21
  • 打赏
  • 举报
回复
欧呀,你的pDC指向了屏幕,打印时要得到打印机的pDC才行。
mybios 2004-10-20
  • 打赏
  • 举报
回复
我这个变量m_pic.hbmp是一个CBitmap类型的变量,在其他地方已经初始化完成了。
mybios 2004-10-20
  • 打赏
  • 举报
回复
//获取图片格式
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(m_pic.hbmp);

我这里不是有了这个语句吗?
只是我用的是静态变量,您用的是指针变量罢了。
kulukyo 2004-10-20
  • 打赏
  • 举报
回复
三星的兄弟都发话了,我也没啥可说的了,顶顶
huaguli 2004-10-20
  • 打赏
  • 举报
回复
同意楼上
快乐鹦鹉 2004-10-20
  • 打赏
  • 举报
回复
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);

16,472

社区成员

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

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

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