怎么在ActiveX控件中进行打印设置 用ATL做了个IE中用的打印控件,页面设置可以通过安装钩子,得到页面设置的窗口。但是打印设置,用同样的方法得不到那个打印窗口,不知道到怎么进行打印设置,即打印机选择,打印份数,缩放比例等。打印是调用IE的打印命令,不是WinAPI的打印。希望高手指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己做打印,完整的过程如下,可以获得打印份数,页面范围: int nMaxPage = 20; PRINTDLG pd; memset(&pd,0,sizeof(PRINTDLG)); pd.lStructSize = sizeof(PRINTDLG); pd.Flags = PD_RETURNDC; pd.nMaxPage = nMaxPage; pd.nMinPage = 1; pd.nFromPage = 1; pd.nToPage = nMaxPage; pd.nCopies = 1; //显示打印对话框,由用户来设定纸张大小等。 if(!PrintDlg(&pd)) return 0; ASSERT(pd.hDC!=NULL); //设置DOCINFO结构 DOCINFO di; memset(&di,0,sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = "Doc's title"; //启动打印 if(StartDoc(pd.hDC, &di)!=SP_ERROR){ // 获取页面范围 UINT nEndPage = pd.nToPage; UINT nStartPage = pd.nFromPage; if (nEndPage < pd.nMinPage) nEndPage = pd.nMinPage; if (nEndPage > pd.nMaxPage) nEndPage = pd.nMaxPage; if (nStartPage < pd.nMinPage) nStartPage = pd.nMinPage; if (nStartPage > pd.nMaxPage) nStartPage = pd.nMaxPage; if (nEndPage<nStartPage) nEndPage = nStartPage; BOOL bError = FALSE; // begin page printing loop for (int nCurPage = nStartPage; nCurPage <= nEndPage && !dlg.m_bStop; nCurPage ++) { //处理其他消息 MSG msg; while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } if (StartPage(pd.hDC)< 0){ bError = TRUE; break; } //这里添加打印内容 char *szInfo="test"; TextOut(pd.hDC,10,10,szInfo,strlen(szInfo)); if (EndPage(pd.hDC) < 0) { bError = TRUE; break; } } if (bError) AbortDoc(pd.hDC); else EndDoc(pd.hDC); } //打印结束 DeleteDC(pd.hDC); 楼上的方法,不知道怎么用来打印网页呢?我现在是想打印网页,所以调用的是IE的API,没敢用WIN API。 请教在VC++2005中如何读取一个EXCEL文件中的数据 如果知道某IP是否被某机器使用? ACtivex控件暴露属性与方法,不明白错在那了。请大家江湖救急!! MFC中如何将BYTE颜色数组显示出来? 这中情况下为什么模态对话框不见了? 如何动态地修改状态栏的提示信息? 那有排版软件制作方面的资料? ATL控件怎样WEB中支持事件?? 在线等待 高分相送 知道IP地址,怎样得到计算机名? 什么地方还要定义? 程序发布时遇到的一个很奇怪的问题,runtime error 高手帮看看怎么还原字符串,实现即结帖!
PRINTDLG pd;
memset(&pd,0,sizeof(PRINTDLG));
pd.lStructSize = sizeof(PRINTDLG);
pd.Flags = PD_RETURNDC;
pd.nMaxPage = nMaxPage;
pd.nMinPage = 1;
pd.nFromPage = 1;
pd.nToPage = nMaxPage;
pd.nCopies = 1;
//显示打印对话框,由用户来设定纸张大小等。
if(!PrintDlg(&pd)) return 0;
ASSERT(pd.hDC!=NULL);
//设置DOCINFO结构
DOCINFO di;
memset(&di,0,sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Doc's title";
//启动打印
if(StartDoc(pd.hDC, &di)!=SP_ERROR){
// 获取页面范围
UINT nEndPage = pd.nToPage;
UINT nStartPage = pd.nFromPage;
if (nEndPage < pd.nMinPage)
nEndPage = pd.nMinPage;
if (nEndPage > pd.nMaxPage)
nEndPage = pd.nMaxPage;
if (nStartPage < pd.nMinPage)
nStartPage = pd.nMinPage;
if (nStartPage > pd.nMaxPage)
nStartPage = pd.nMaxPage;
if (nEndPage<nStartPage)
nEndPage = nStartPage; BOOL bError = FALSE;
// begin page printing loop
for (int nCurPage = nStartPage;
nCurPage <= nEndPage && !dlg.m_bStop; nCurPage ++)
{
//处理其他消息
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} if (StartPage(pd.hDC)< 0){
bError = TRUE;
break;
}
//这里添加打印内容
char *szInfo="test";
TextOut(pd.hDC,10,10,szInfo,strlen(szInfo));
if (EndPage(pd.hDC) < 0)
{
bError = TRUE;
break;
}
}
if (bError)
AbortDoc(pd.hDC);
else
EndDoc(pd.hDC); }
//打印结束
DeleteDC(pd.hDC);
我现在是想打印网页,所以调用的是IE的API,没敢用WIN API。