我正在开发一个项目,我需要从设备编程进行打印操作。 它有WIN CE 6.0。我正在使用Visual Studio 2005(MFC)。 打印机可以是任何PCL兼容的打印机。
目前,要获得打印机DC,我正在使用CreateDC()。
hPrinterDC = CreateDC(L"PCL.DLL", L"Any Name", L"LPT1", NULL);
使用此调用我可以成功打印。 这里我将DEVMODE特定的输入参数传递为NULL。但是为了更好地控制这些打印操作,我需要将DEVMODE信息传递给CreateDC()。
为此,我计划按照上面的说明调用CreateDC(),以在注册表中生成DEVMODE特定信息。然后,我可以将此DEVMODE数据从注册表读取到本地变量,仅修改此变量的必要字段,并将此变量传递给CreateDC()以获取打印机DC,以便执行实际的打印操作。
我避免直接初始化DEVMODE结构,因为我没有关于DEVMODE的某些字段的足够信息,例如dmDriverExtra。
我需要知道如何安全地从注册表中读取DEVMODE这样的结构?任何相关的例子都会非常有用。
亲切的问候, 阿夫塔卜
答案 0 :(得分:0)
这是古老的,但万一有人发现这仍然有用。
DEVMODE包含私有和公共区域,因此分配大小等于sizeof(DEVMODE)将排除某些设置。初始化DEVMODE的正确方法是使用DocumentProperties()函数查询其默认状态。它返回最后一个参数设置为零时所需的字节数。