使用win api:OpenPrint()后使用SetPrint(),msdn有api的说明.,其中有一个结构DEVMODE中可初始打印方向.
解决方案 »
- VC图片控件自动加载JPEG图片
- 急求 帮我看下用CommandPtr对表里字段类型是Binary的 是怎么操作
- 请问:如何修改模式对话框的WNDCLASS的成员
- 使用IE内核编写浏览器时,有没有什么方法可以得到IE发送的http请求信息
- 关于VC6.0中m_strFiler设置筛选条件的问题
- 关于对话框的打印问题(菜鸟的提问)
- 高分求 解决Socket recv错误问题!
- 怎么样开发类似pplive,ppmate的界面?
- 当dll 有可能被同一进程多次载入,可以吗?
- 为什么www.codeproject.com和www.codeguru.com上面的代码都下载不下来?
- 救命!!为什么我的COM在调用的时候总是出错?
- 高手请帮忙
//Set the orient of the printer
//sPrnName is the name of the printer
BOOL SetPrinterOrient(CString sPrnName,BOOL bPortrait)
{
if(sPrnName.IsEmpty())
return FALSE;
HANDLE hPrinter=NULL;
BOOL bFlag;
DWORD dwNeeded=0;
PRINTER_INFO_2* pPI2=NULL;
HANDLE h;
PRINTER_DEFAULTS* ppd=new PRINTER_DEFAULTS; ZeroMemory(ppd,sizeof(PRINTER_DEFAULTS));//zero the memory
ppd->DesiredAccess=PRINTER_ALL_ACCESS;//set access priority
bFlag=OpenPrinter( sPrnName.GetBuffer(sPrnName.GetLength()),&hPrinter,ppd);//open the printer
sPrnName.ReleaseBuffer();
if(bFlag && hPrinter && ppd)
{
GetPrinter(hPrinter,2,0,0,&dwNeeded);
if(dwNeeded)
{
h=GetProcessHeap();
if(h)
{
pPI2=(PRINTER_INFO_2*)HeapAlloc(h,HEAP_ZERO_MEMORY,dwNeeded);
if(pPI2)
{
bFlag=GetPrinter(hPrinter,2,(LPBYTE)pPI2,dwNeeded,&dwNeeded);
if(bFlag)
{
if( (pPI2->pDevMode!=NULL) && (pPI2->pDevMode->dmFields& DM_ORIENTATION ))
{
pPI2->pDevMode->dmOrientation= (bPortrait ? DMORIENT_PORTRAIT : DMORIENT_LANDSCAPE);
bFlag=SetPrinter(hPrinter,2,(LPBYTE)pPI2,0);
}
}
HeapFree(h,HEAP_NO_SERIALIZE,pPI2);
}
}
}
}
if( hPrinter)
ClosePrinter(hPrinter);
if(ppd)
delete ppd;
return bFlag;
}打印机的名字sPrnName我是这样得到的。如成功Func返回TRUE,str中返回的其名字,如失败则Func返回FALSE
BOOL InitPrinter(CString &str)//
{
DWORD dwNeeded, dwReturned ;
str.Empty();
PRINTER_INFO_4 * pinfo4 ;
PRINTER_INFO_5 * pinfo5 ;
HANDLE h=GetProcessHeap();
if(!h)
return FALSE;
if (GetVersion () & 0x80000000) // Windows 98
{
EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, NULL,
0, &dwNeeded, &dwReturned) ;
if(dwNeeded==0)
return FALSE;
pinfo5 = (PRINTER_INFO_5*)HeapAlloc(h,HEAP_ZERO_MEMORY,dwNeeded);
if(pinfo5)
{
pinfo5->pPrinterName=NULL;
if(EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE) pinfo5,
dwNeeded, &dwNeeded, &dwReturned) )
if(pinfo5->pPrinterName)
str=pinfo5->pPrinterName;
HeapFree(h,HEAP_NO_SERIALIZE,pinfo5);
}
}
else // Windows NT
{
EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 4, NULL,
0, &dwNeeded, &dwReturned) ;
if(dwNeeded==0)
return FALSE;
pinfo4 = (PRINTER_INFO_4*)HeapAlloc(h,HEAP_ZERO_MEMORY,dwNeeded);
if(pinfo4)
{
if(EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pinfo4,
dwNeeded, &dwNeeded, &dwReturned) )
pinfo4->pPrinterName=NULL;
if(pinfo4->pPrinterName)
str=CString(pinfo4->pPrinterName);
HeapFree(h,HEAP_NO_SERIALIZE,pinfo4);
}
}
return TRUE;
}