windows UniDrv用户界面插件:无法显示纸张大小字段

fnvucqvd  于 2023-04-07  发布在  Windows
关注(0)|答案(1)|浏览(261)

我必须修改的打印机驱动程序适用于具有自定义纸张大小的卷筒式打印机,并且应用程序使用自定义(应用程序定义)大小。
*Feature: PaperSize目前是隐藏的UI。我的任务是使它显示。但它拒绝。
隐藏发生在两个地方:

  • 在gpd中:
*Feature: PaperSize
{
    *rcNameID: =PAPER_SIZE_DISPLAY
    *DefaultOption: Size_4x6
    *ConcealFromUI?: TRUE      *% Removing this

    *Option: Size_4x6
    {
        *Name: "4 x 6"
        *PageDimensions: PAIR(1200, 1800)
        *PrintableArea: PAIR(1200, 1800)
        *PrintableOrigin: PAIR(0, 0)
    }
    ....
    *Option: CUSTOMSIZE
    {
        *Name: "CUSTOM SIZE"
        *rcNameID: =USER_DEFINED_SIZE_DISPLAY
        ...
    }
}
  • 在UI插件中:
for (DWORD i = 0; i < pOemCUIPParam->cDrvOptItems; i++)
{
    VERBOSE("pOemCUIPParam->pDrvOptItems[i].DMPubID %d\n", pOemCUIPParam->pDrvOptItems[i].DMPubID);
    if (pOemCUIPParam->pDrvOptItems[i].DMPubID == DMPUB_FORMNAME)
    { 
        VERBOSE("Sad story, this never happens\n");
    }
    else 
    // This is the original code. The part above is my intention to treat DMPUB_FORMNAME separately
    if ((pOemCUIPParam->pDrvOptItems[i].DMPubID > DMPUB_FIRST) && (pOemCUIPParam->pDrvOptItems[i].DMPubID < DMPUB_LAST))
    {
        pOemCUIPParam->pDrvOptItems[i].Flags |= (OPTIF_HIDE | OPTIF_EXT_DISABLED);
    }
}

删除*ConcealFromUI?: TRUE并在调试模式下运行,并显示所有pOemCUIPParam->pDrvOptItems[i].DMPubID,我发现DMPUB_FORMNAME没有出现。
除了Microsoft Windows驱动程序示例之外,我找不到任何示例,并且无法确定为什么没有DMPUB_FORMNAME值。
我在调试中得到的唯一一个是:DMPUB_DEFSOURCE, DMPUB_ORIENTATION, DMPUB_COPIES_COLLATE, DMPUB_COLOR, DMPUB_ICMMETHOD, DMPUB_ICMINTENT, DMPUB_NUP, DMPUB_PAGEORDER, DMPUB_NUP_DIRECTION-我期待更多。
我不能确定我的gpd是否不正确,或者我是否必须添加一些特定的东西来显示表单。方向选择器,尽管上面的代码应该隐藏它,但它并没有隐藏,不需要显示任何代码。
驱动程序是功能性的,并且纸张大小可通过驱动程序选项获得,并且在某些软件中可通过页面设置获得。但不在打印首选项对话框中。
我必须做些什么才能显示DMPUB_FORMNAME
任何能为我指明正确方向的建议都将不胜感激。

3ks5zfa0

3ks5zfa01#

解决方案:在GPD表单显示的名称中使用*rcNameID:代替*Name:
实际问题:一些表单有小数,奇怪的是,表单名称中似乎不支持点。因此,需要为这些特定表单使用资源引用。奇怪的是,表单确实存在于服务器属性中(包括小数),但没有转发到UI。
示例:*Name: "My 8.5x11"不受支持,但如果我将其定义为资源,我仍然可以使用它。

相关问题