3229|4

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于windows ce屏幕打印 [复制链接]

    要实现界面抓图并打印,写了如下的代码:
    HDC  hScrDC, hMemDC;
    int  scr_width_pels, scr_height_pels;
    BITMAPINFO RGB24BitsBITMAPINFO;
    BITMAPFILEHEADER bmBITMAPFILEHEADER;
    BYTE  *lpBitmapBits = NULL;
    HANDLE directBmp;
    HGDIOBJ previousObject;
    HDC  hMemoryDC  = NULL;
    BITMAP stBitmap;

    hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
    //获取屏幕的宽和高
    scr_width_pels = GetDeviceCaps(hScrDC, HORZRES);
    scr_height_pels = GetDeviceCaps(hScrDC, VERTRES);

    hMemDC = CreateCompatibleDC(hScrDC);
    //对RGB24BitsBITMAPINFO进行赋值,省略
    ....
    //创建bmp
    directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO, DIB_RGB_COLORS,
                                 (void **)  &lpBitmapBits, NULL, 0);   
    previousObject = SelectObject(hMemDC, directBmp);
    BitBlt(hMemDC, 0, 0, RGB24BitsBITMAPINFO.bmiHeader.biWidth, RGB24BitsBITMAPINFO.bmiHeader.biHeight,  hScrDC, 0, 0, SRCCOPY);

    //对bmBITMAPFILEHEADER进行赋值,省略
    ...
    //写文件进行图像保存
    mStream = fopen(_T("\\windows\\screen.bmp"), "wb");
    fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
    fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
    fwrite(lpBitmapBits, 3*scr_width_pels*scr_height_pels, 1, mStream);
    fclose(mStream)

    SelectObject(hMemDC,previousObject);
    DeleteDC(hMemDC);
    DeleteDC(hScrDC);
   
    //进行打印
    hPrinterDC = CreateDC(szDriver,NULL,szPort,&printDM)   
    //打印机对应参数进行赋值
    .....
    //创建内存dc
    hMemoryDC  = CreateCompatibleDC(NULL);  
    previousObject = SelectObject(hMemoryDC, directBmp);
    //开始打印
    StartDoc(hPrinterDC,&di);
    StartPage(hPrinterDC);

    //获取图像信息
    GetObject( directBmp, sizeof(stBitmap), (PVOID)&stBitmap );

    StretchBlt(hPrinterDC, 0, 0, stBitmap.bmWidth, stBitmap.bmHeight, hMemoryDC, 0,    0,stBitmap.bmWidth,stBitmap.bmHeight, SRCCOPY);
    //结束打印
    EndPage(hPrinterDC);
    EndDoc(hPrinterDC);
   
    SelectObject(hMemoryDC,previousObject);
    DeleteDC(hMemoryDC);
    DeleteDC(hPrinterDC);
    DeleteObject(directBmp);
   
这个代码在windows ce 5.0下操作正常,保存和打印都是正常的,但是在windows ce 4.2下发现图像保存正确,但是在打印的时候,屏幕左边的部分正常打印,但是右边的一部分打印出来是黑块。不知道产生这个现象的原因是什么,如果要在ce4.2下使用,该怎么改进。谢谢!

   
   
   

最新回复

问题解决,打印机参数设置的问题。  详情 回复 发表于 2009-7-7 14:50
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有人知道是怎么回事吗,是因为这个StretchBlt函数在ce4.2下实现不够全面导致的吗?
因为我看到ce5.0已经支持了SetStretchBltMode,可是ce4.2下并不支持!多谢!
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 benben3611 的回复:
有人知道是怎么回事吗,是因为这个StretchBlt函数在ce4.2下实现不够全面导致的吗?
因为我看到ce5.0已经支持了SetStretchBltMode,可是ce4.2下并不支持!多谢!


建议LZ还是多怀疑自己的程序,StretchBlt()在CE1.0的版本就可以使用了
怎么可能有Bug?
 
 
 

回复

80

帖子

0

TA的资源

禁止访问

4
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

5
 
问题解决,打印机参数设置的问题。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表