• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 江湖教急!小弟想在COM中实现打印,请各位大大帮忙

江湖教急!小弟想在COM中实现打印,请各位大大帮忙

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了江湖小弟,周星驰教小弟收保护费,王者小弟,exo 女王我的12只小弟,精灵鼠小弟1等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 江湖教急!小弟想在COM中实现打印,请各位大大帮忙
描述:

就是说我编一个COM组件,在组件中输出接口函数,如PRINT
客户端只用调用我编的这个COM接口的PRINT函数实现打印
至于打印什么没关系,几行字也行,文件也行,我只想请教这怎么实现
最好给段简单的代码示例


解决方案1:

int get_line_height(HDC hdc)
{   //return text line height
    //return value < 0 if map mode is not MM_TEXT, so that you can always use
    //y+= line_height when drawing to device.
    int map_mode = GetMapMode(hdc);
 TEXTMETRIC tm;
 GetTextMetrics(hdc,&tm);
 int h = tm.tmHeight + tm.tmExternalLeading;
 if(MM_TEXT != map_mode)
  h = 0 - h;
 return h;
}
double get_screen_pixel_width(int map_mode)
{   //purpose: a pixel displayed in MM_TEXT mode should be about the same size
    //when displayed in other map mode.
 HDC hdc = GetDC(NULL);
 double hroz_size = GetDeviceCaps(hdc,HORZSIZE);//Width, in millimeters, of the physical screen.
 double horz_res = GetDeviceCaps(hdc, HORZRES);//Width, in pixels, of the screen.
 double pixel_width = hroz_size / horz_res; // Width, in millimeters
 // 1 inch = 25.4 mm
 const double INCH_TO_MM = 25.4;
 const double INCH_TO_TWIP = 1440;
 switch(map_mode)
  {
  case MM_LOMETRIC:
    pixel_width *= 10;   
    break;
  case MM_HIMETRIC:
   pixel_width *= 100;
   break;
  case MM_TEXT:
   break;
  case MM_LOENGLISH: //Each logical unit is mapped to 0.01 inch
   pixel_width = pixel_width / INCH_TO_MM * 100;
   break;
  case MM_HIENGLISH: //Each logical unit is mapped to 0.001 inch
   pixel_width = pixel_width / INCH_TO_MM * 1000;
   break;
  case MM_TWIPS: //Each logical unit is mapped to one twentieth of a printer's point (1/1440 inch, also called a twip).
   pixel_width = pixel_width / INCH_TO_MM * INCH_TO_TWIP;
   break;
  default:
   break;
  }
 return pixel_width;//Width, in logical units according to the map_mode
}
void draw(HDC hdc)
{
    int map_mode = MM_TWIPS;
    LPCTSTR map_name = "MM_TWIPS";
SetMapMode(hdc,map_mode); //Each logical unit is mapped to 0.1 millimeter.
    int x = 0;
int y = 0;
int line_h = get_line_height(hdc);
SelectObject(hdc,GetStockObject(BLACK_PEN)); 
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc,x, y,map_name,strlen(map_name));
y += line_h;
LPCTSTR error_msg = "print to default printer from COM method";
TextOut(hdc,x,y,error_msg,strlen(error_msg));
}
STDMETHODIMP CTestObj::Test()
{
// print to default printer from COM method
// Onega(www.fruitfruit.com) 
// VC6.0 Sp6, windows xp sp2
HDC hdc;
PAINTSTRUCT ps;
static PRINTDLG pd;
static DOCINFO dci;
static LPTSTR lpszDocName="Print Test";
ZeroMemory(&pd,sizeof(pd));
pd.lStructSize=sizeof(pd);
pd.Flags=PD_RETURNDC|PD_HIDEPRINTTOFILE |PD_RETURNDEFAULT;
pd.nFromPage=1;
pd.nToPage=1;
pd.nMinPage=1;
pd.nMaxPage=1;
pd.nCopies=1;
dci.cbSize=sizeof(dci);
dci.lpszDocName=lpszDocName;
dci.lpszOutput=NULL;
dci.lpszDatatype=NULL;
dci.fwType=0;
if (!PrintDlg(&pd))
return E_FAIL;
hdc=pd.hDC;
StartDoc(hdc,&dci);
StartPage(hdc);
draw(hdc);
EndPage(hdc);
EndDoc(hdc);
return S_OK;
}
if you don't know how to print a bitmap, refer to
http://www.fruitfruit.com/vc/release/post/print.htm


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 江湖教急!小弟想在COM中实现打印,请各位大大帮忙

相关文章

  • 2017-06-04 调用默认浏览器失败问题
  • 2017-06-05 如何在vc6中把对ORACEL数据库的操作做成一个子线程
  • 2017-06-04 [向jiangsheng提问]vc60Datagrid控件问题
  • 2017-06-04 送分问题,大家请帮忙,说给就给。
  • 2017-06-04 求:Msxml2XMLHTTP中的几个函数原形
  • 2017-06-04 有哪位兄弟使用过DHTMLEdit控件请不赐吝教!!!!!!!!!!!!!1
  • 2017-06-04 请教各位:客户端如何用_bstr_t类型的变量接受接口中的返回的BSTR的变量。
  • 2017-06-05 cab包中exe的自动运行
  • 2017-06-04 求助:如何使用ISTORAGE接口把文件拷贝到光盘中啊?
  • 2017-06-04 程序在别的电脑打不开的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • flash控件的问题
    • 得到VARIANT类型的数据,如何获取里面的值
    • SammyLan进来拿分
    • 有关IE的开发问题有難度啊高手請進
    • Windows2000下句柄的概念?
    • 在Activex里如何定义新的数据类型,使得在vb中可以用它来定义新的对象?
    • 请问如何将一个网址如:wwwsinacom传给一个已经运行的IE窗口,让此窗口访问wwwsinacom
    • 建立MFCDll编译中遇到的错误
    • 使用MSXML和智能指针遇到的问题!请高手指教!
    • ActiveX控件发布的问题,请高手指导

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有