从Registry读取DEVMODE结构

时间:2012-06-30 15:25:35

标签: mfc windows-ce arm9

我正在开发一个项目,我需要从设备编程进行打印操作。 它有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这样的结构?任何相关的例子都会非常有用。

亲切的问候, 阿夫塔卜

1 个答案:

答案 0 :(得分:0)

这是古老的,但万一有人发现这仍然有用。

DEVMODE包含私有和公共区域,因此分配大小等于sizeof(DEVMODE)将排除某些设置。初始化DEVMODE的正确方法是使用DocumentProperties()函数查询其默认状态。它返回最后一个参数设置为零时所需的字节数。