如何在Windows XP上显示Windows照片打印向导?

3
1个回答

6

MSDN网站提供相关示例代码:

static const CLSID CLSID_PrintPhotosDropTarget = 
  {0x60fd46de, 0xf830, 0x4894, {0xa6, 0x28, 0x6f, 0xa8, 0x1b, 0xc0, 0x19, 0x0d}};

// A data object that contains the list of photos to print.
IDataObject* pDataObject;

// Create the Photo Printing Wizard drop target.
CComPtr<IDropTarget> spDropTarget;

hr = CoCreateInstance(CLSID_PrintPhotosDropTarget,
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      IID_PPV_ARGS(&spDropTarget));

// Drop the data object onto the drop target.
POINTL pt = {0};
DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;

spDropTarget->DragEnter(pDataObject, MK_LBUTTON, pt, &dwEffect);

spDropTarget->Drop(pDataObject, MK_LBUTTON, pt, &dwEffect);

Delphi代码示例如下:

uses
  ActiveX, ComObj;

const
  CLSID_PrintPhotosDropTarget: TGUID = '{60FD46DE-F830-4894-A628-6FA81BC0190D}';

procedure InvokePhotoPrintingWizard;
var
  Effect: LongInt;
  Position: TPoint;
  DataObject: IDataObject;
  DropTarget: IDropTarget;
begin
  // create the Photo Printing Wizard drop target
  OleCheck(CoCreateInstance(CLSID_PrintPhotosDropTarget, nil,
    CLSCTX_INPROC_SERVER, IDropTarget, DropTarget));
  // drop the data object onto the drop target
  Position.X := 0;
  Position.Y := 0;
  Effect := DROPEFFECT_LINK or DROPEFFECT_MOVE or DROPEFFECT_COPY;
  OleCheck(DropTarget.DragEnter(DataObject, MK_LBUTTON, Position, Effect));
  OleCheck(DropTarget.Drop(DataObject, MK_LBUTTON, Position, Effect));
end;

谢谢朋友,当我传递带有文件路径的字符串时,它无法正确获取它。您可以帮助我传递完整路径,例如C:\ photo.jpg。可以创建一个函数,如下: ShowPrinteWizard procedure (aFilePath: string);再次感谢您的帮助。 - Wesley Bobato
1
你需要将文件名填入IDataObject中。这超出了本问题的范围。请参阅如何使用Delphi创建IDataObject实例?以获取有关创建实现IDataObject的内容的建议。您可以自己实现接口,或者按照链接构建一个文件列表,然后调用GetUIObjectOf来获取表示所有文件的数据对象的示例代码。 - Rob Kennedy
谢谢朋友,我会尝试,但我知道我做不到,因为这对我来说太高级了。大大的拥抱。 - Wesley Bobato
你好TLama,不幸的是,它只能在Windows XP上运行。我该如何在InvokePhotoPrintingWizard过程中传递文件路径呢?例如,在Function中的路径为C:\ picture.jpeg。 - Wesley Bobato
1
Wesley,你需要做的就是填充DataObject,我已经给你提供了演示链接。我知道你说这很难,但生活就是如此。这个Windows API的特定部分并不简单。坐下来,仔细阅读它,在遇到你从未见过的函数时请参考MSDN,你会学会的。如果你还是迷失了,那么在这里发布一个新问题,询问你不理解的具体部分即可。 - Rob Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接