自定义打印页面的大小

oklys 2006-06-16 10:09:36
在VC中怎么自定义打印机的页面的尺寸,最好有源码。谢谢!
...全文
327 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Juchiyufei 2006-11-29
  • 打赏
  • 举报
回复
谢谢你的代码。

最近正在做一个打印的
oklys 2006-07-07
  • 打赏
  • 举报
回复
下面代码中从打印机中取得DEVMODE结构,然后你就可以做你想做的事情了
PRINTDLG pd;
ZeroMemory(&pd, sizeof(PRINTDLG));
AfxGetApp()->GetPrinterDeviceDefaults(&pd);

DEVMODE* pDV = (LPDEVMODE) ::GlobalLock(pd.hDevMode);
//Do something with the data...
GlobalUnlock(pd.hDevMode);

oklys 2006-07-07
  • 打赏
  • 举报
回复
HANDLE hPrinter;
SIZEL FormSize;
FORM_INFO_1 FI1;
unsigned char arrFI1[sizeof(FI1)];
int Retval;int y=0;

char szprinter[80];
char *szDevice,*dszDriver;
static DOCINFO di={sizeof(DOCINFO),"printer",NULL};
GetProfileString("windows","device",",,,",szprinter,80);
szDevice=strtok(szprinter,",");//获得默认打印机名保存在szprinter中
dszDriver=strtok(NULL,",");

long nSize;

if(OpenPrinter(NULL,&hPrinter,NULL) )
{
FormSize.cx=50000;//in thousandths of millimeters 宽度
FormSize.cy=4000000;//高度30cm
FI1.Flags = 0;
FI1.pName ="myform";
FI1.Size.cx = FormSize.cx;
FI1.Size.cy = FormSize.cy;
FI1.ImageableArea.top = 0;
FI1.ImageableArea.left = 0;
FI1.ImageableArea.right = FI1.Size.cx;
FI1.ImageableArea.bottom = FI1.Size.cy;

CopyMemory(arrFI1, &FI1, sizeof(FI1));
//6,15

nSize = DocumentProperties(NULL,&hPrinter,dszDriver,NULL,NULL,NULL);
DEVMODE* aDevMode = new DEVMODE;//nSize
aDevMode->dmSize = nSize;//sizeof(DEVMODE)
LPDEVMODE pDevMode = new DEVMODE;
pDevMode->dmSize = nSize;

nSize = DocumentProperties(NULL,&hPrinter,dszDriver,aDevMode,NULL,DM_OUT_BUFFER);
CopyMemory(pDevMode, aDevMode, sizeof(DEVMODE));

unsigned char strfn[32] = "myform";
CopyMemory(pDevMode->dmFormName,strfn,7);
pDevMode->dmFields = DM_FORMNAME;

CopyMemory(aDevMode, pDevMode,sizeof(DEVMODE) );
nSize = DocumentProperties(NULL,&hPrinter,dszDriver,aDevMode,aDevMode,DM_IN_BUFFER||DM_OUT_BUFFER);

Retval = AddForm(hPrinter,1,arrFI1);
if(Retval==0)
{
AfxMessageBox("You do not have permissions to add a form to Print!");
}
else
{
if(SetForm(hPrinter,FI1.pName,1,arrFI1) )
{
//在此处进行打印操作
char dszprinter[80];
char *dszDevice,*dszDriver,*dszOutput;
HDC dhdcprint;
static DOCINFO ddi={sizeof(DOCINFO),"printer",NULL};
GetProfileString("windows","device",",,,",dszprinter,80);
if(NULL!=(dszDevice=strtok(dszprinter,","))&&NULL!=(dszDriver=strtok(NULL,","))&&
NULL!=(dszOutput=strtok(NULL,",")))
if((dhdcprint=CreateDC(dszDriver,dszDevice,dszOutput,NULL))!=0)//创建一个打印机设备句柄
{
if(StartDoc(dhdcprint,&di)>0)
{
StartPage(dhdcprint);
SaveDC(dhdcprint);
//SetMapMode(dhdcprint,MM_LOMETRIC);
//TextOut(dhdcprint,1,1,"热烈祝贺",8);
//TextOut(dhdcprint,100,100,"热烈祝贺",8);
MoveToEx(dhdcprint,200,0,NULL);
while(y<3000000){
y+=500;
LineTo(dhdcprint,200,y);
TextOut(dhdcprint,200,y,"热烈祝贺",8);}
//LineTo(dhdcprint,200,-3000);
RestoreDC(dhdcprint,-1);
EndPage(dhdcprint);
EndDoc(dhdcprint);
MessageBox("打印完毕!","提示",MB_ICONINFORMATION);
}
DeleteDC(dhdcprint);
}
else
{
MessageBox("创建设备环境错误!");
return;
}
if(!DeleteForm(hPrinter,FI1.pName) ) AfxMessageBox("delete error");
}
else
AfxMessageBox("SetForm error!");
}
ClosePrinter (&hPrinter);
}
else
{
CHAR szBuf[80];
DWORD dw = GetLastError();

sprintf(szBuf, "%s failed: GetLastError returned %u\n",
"prn", dw);

MessageBox(szBuf, "Error", MB_OK);
ExitProcess(dw);
}
oklys 2006-06-27
  • 打赏
  • 举报
回复
这个问题我自己已经解决了,等我有时间把详细代码送上。
huacha 2006-06-16
  • 打赏
  • 举报
回复
http://www.wave12.com/web/SigCon.asp?bCate=50&sCateName=%B9%A6%C4%DC%BD%E9%C9%DC&ID=173&CateName=wsReport4.5
源码链接: https://pan.quark.cn/s/9f500ac403c2 摄像头配置是嵌入式系统构建中的一个关键步骤,它涉及到硬件与软件的紧密协作。图像信号处理器(ISP)作为图像信号处理的核心单元,在摄像头配置过程中扮演着至关重要的角色。在硬件层面,它涵盖了摄像头与ISP之间的连接以及信号传输的细节;在软件层面,主要依托V4L2框架进行视频流的采集和处理。接下来将具体说明文档中涉及的硬件机制、软件机制、信号配置及V4L2等领域的摄像头配置实践经验。 ### 硬件机制与连接 文档首先阐述了硬件线路中中央处理器与摄像头之间的连接方式。在此,相机串行接口(CSI)模块是摄像头数据传输的核心部分,它负责与外部CMOS图像感应元件进行交互。CSI接口包含以下几个关键信号线: 1. **CSI_VSYNC (垂直同步信号)**:用于标示一帧图像的起始点。该信号传输方向为从图像感应元件(sensor)至应用处理器(AP)。 2. **CSI_HSYNC (水平同步信号)**:用于提供行同步信号,并用于识别消隐信号。同样,信号流向为sensor至AP。 3. **CSI_D[7:0]**:8位摄像头数据总线,用于传输各种图像数据,包括YUV、YCC、RGB或Bayer格式。数据流向为sensor至AP。 4. **CSI_MCLK (传感器主时钟信号)**:由传感器输出主时钟信号,为外部摄像头提供时钟基准。信号流向为AP至sensor。 5. **CSI_PIXCLK (像素时钟信号)**:由摄像头输出,通常与MCLK主时钟信号频率相同。信号流向为sensor至AP。 正确设置这些连接,确保信号同步传输,是硬件配置的基础。 ### 软件机制与驱动程序 摄像头驱动...
文末附数据集可视化效果图。 【数据集概况】 · 检测类别(中文):[大豆(soybean)] · 训练集:777 张 · 验证集:0 张 · 测试集:0 张 · 总计:777 张 该数据集聚焦农业科研领域,针对温室环境下大豆幼苗的精准检测需求,为植物生长监测与自动化管理提供高质量数据支撑。训练集777张,验证集和测试集为0张,符合农业科研场景中对特定生长阶段样本集中训练的需求,确保模型在目标场景下的泛化能力。所有样本均采用精准的边界框标注,标注规范统一,确保了数据集在大豆幼苗检测任务中的高精度与可靠性。该数据集可应用于农业科研机构的植物生长监测系统、智能温室管理平台等场景,... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9922** mAP50-95 | 0.9141 Precision | 0.9771 Recall | 0.9710 train/box_loss | 0.4231 train/cls_loss | 0.1829 val/box_loss | 0.3920 val/cls_loss | 0.1737 【训练过程分析】 100 轮训练后 mAP50 达到 0.9922,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9141,和 mAP50 差距仅 0.08,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9771、Recall 0.9710,精召双高,模型对大豆的检测能力强。...
内容概要:本文围绕通过短时倒谱(Cepstrogram)计算进行时-倒频分析展开研究,系统阐述了该方法在非平稳信号处理中的理论基础与技术优势。文章深入剖析了短时倒谱的计算原理,强调其在解耦卷积信号、识别周期性调制特征以及增强微弱瞬态成分方面的独特能力,并结合Matlab代码实现了完整的时-倒频分析流程。研究对比了该方法与传统时频分析及全局倒谱分析的性能差异,验证了其在语音、机械振动、音频等信号处理中具备更强的特征解耦能力与动态跟踪精度。同时,文章也探讨了该方法在时间-倒频分辨率平衡与计算复杂度方面存在的技术局限,并提出了潜在的优化路径。; 适合人群:具备一定信号处理理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适用于从事机械故障诊断、声学信号分析、生物医学信号处理及工业状态监测等领域的专业研究人员。; 使用场景及目标:①用于分析含有卷积混叠或周期性调制的非平稳信号,如机械系统中的冲击故障信号、语音信号的基音周期检测;②提升在强噪声背景下对微弱周期性特征的识别能力,实现更精准的设备状态监测与早期故障预警;③为相关科研项目提供可复现的Matlab代码实例与完整的技术实现路线,支撑算法验证与工程应用开发。; 阅读建议:建议读者结合文中提供的Matlab代码逐行运行与调试,深入理解短时傅里叶变换与倒谱变换的衔接逻辑与参数设置影响,重点关注时-倒频图的生成机制与物理意义解读,同时鼓励将该方法应用于实际工程信号以验证其有效性并深化对方法适用边界的认知。

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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