如何使用Formula One 5.0的PrintDevMode属性
编号:QA000296
建立日期: 1999年1月5日 最后修改日期:1999年1月5日
所属类别:
sansunlin:
如何使用Formula One 5.0的PrintDevMode属性读写Windows API的DEVMODE的打印结构?
回答:
Formula One 5.0的PrintDevMode属性实际上是一个储存DEVMODE的一个全局句柄。下面是Formula One 5.0的开发者Tidestone Technologies, Inc.提供给我的一段例子(设置纸张大小为A4),使用C++写的,供你参考。
///////////////////////// Solution ///////////////////////////////////
///// Note: only call once (for instance when the F1Book is initialized)
///// Access devmode dierctly from F1 book after that
void SetA4Paper(CWinApp& myApp,CF1Book& book)
{
PRINTDLG pd; pd.lStructSize = (DWORD) sizeof(PRINTDLG);
myApp.GetPrinterDeviceDefaults(&pd);
HGLOBAL hAppDevMode, hGridDevMode;
LPDEVMODE pAppDevMode, pGridDevMode;
hAppDevMode = pd.hDevMode;
pAppDevMode = (LPDEVMODE)::GlobalLock(hAppDevMode);
if (pAppDevMode)
{
hGridDevMode = ::GlobalAlloc(GHND, pAppDevMode->dmSize +
pAppDevMode->dmDriverExtra);
pGridDevMode = (LPDEVMODE)::GlobalLock(hGridDevMode);
//pAppDevMode = (LPDEVMODE)::GlobalLock(hAppDevMode);
CopyMemory(pGridDevMode, pAppDevMode, pAppDevMode->dmSize +
pAppDevMode->dmDriverExtra);
pGridDevMode->dmPaperSize=DMPAPER_A4;
// Unlock memory handles.
GlobalUnlock(hAppDevMode);
GlobalUnlock(hGridDevMode);
book.SetPrintDevMode((long) hGridDevMode);
}
}
/////////////////// Solution end ////////////////////////////
此问题由李海回答。
| |
|
|
| |
|
|