線上列印精靈
Windows Vista Online 列印精靈可協助使用者訂購參與線上列印零售商的相片列印。 此精靈的設計目的是要讓使用者能夠訂購相片列印的任何應用程式,以程式設計方式叫用此精靈。 [相片列印精靈] 可在 Windows Vista 上使用。 適用于 Windows 的 PIX
線上列印精靈所提供的功能
Windows Vista Online 列印精靈可讓使用者從參與線上列印零售商的選取範圍訂購列印。 叫用時,精靈:
- 接受要排序列印的檔案或檔案清單。
- 自動擷取目前參與線上列印零售商的清單,並讓使用者選取要從中購買相片列印的零售商。
- 引導使用者完成程式或訂購列印。
任何應用程式都可以受益于 Windows Vista Online 列印精靈所提供的功能。 應用程式只需要傳入將排序列印的檔案或檔案,精靈會引導使用者完成排序程式。
下圖顯示 Windows Vista 線上列印精靈,其中顯示參與線上列印零售商的範例清單。
支援的相片檔案格式
Windows Vista Online 列印精靈支援安裝 WINDOWS 映射元件 (WIC) 編解碼器的任何圖像檔案格式。 WIC 提供數個標準編解碼器,包括:
- 點陣圖 (BMP)
- 圖形交換格式 (GIF)
- 圖示格式 (ICO)
- JPEG 格式 (JPEG)
- 可攜式網路圖形 (PNG)
- 標記的影像檔案格式 (TIFF)
- Windows 媒體相片格式
如需 WIC 和 WIC 編解碼器的詳細資訊,請參閱 Windows 映像處理元件。
線上列印零售商支援的檔案格式會因零售商而異;特定零售商可能不支援 Windows Vista Online 列印精靈支援的所有檔案格式。 如果使用者嘗試以所選零售商不支援的格式訂購列印,Windows Vista Online 列印精靈會通知使用者選取的零售商不支援提交的檔案格式。
以程式設計方式啟動線上列印精靈
若要叫用 Windows Vista Online 列印精靈,請使用下列類別識別碼呼叫 IDropTarget 介面, (CLSID) :
CLSID_PublishDropTarget
此 CLSID 定義于 Shobjidl.h 和 Shobjidl.idl 中。 Windows Vista 線上列印精靈所要處理的檔案是在 IDataObject 物件中指定。
下列程式碼範例示範如何叫用 Windows Vista Online 列印精靈。
// 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_PublishDropTarget,
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);}
存取線上列印精靈圖示
Windows Vista Online 列印精靈會匯出可由呼叫它的應用程式存取和顯示的圖示。 下圖顯示 Windows Vista Online 列印精靈圖示。
下列程式碼範例示範如何讀取 OPWIcon 屬性來擷取 Windows Vista Online 列印精靈圖示的索引。
// Create the Online Printing Wizard drop target.
CComPtr<IDropTarget> spDropTarget;
HRESULT hr = CoCreateInstance(CLSID_PublishDropTarget,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&spDropTarget));
// Get the Online Printing Wizard properties.
CComPtr<IPropertyBag> spPropsBag;
spDropTarget->QueryInterface(IID_PPV_ARGS(&spPropsBag));
// Read the icon index from the properties set.
CComVariant vtIcon;
int nIndex;
hr = spPropsBag->Read(L"OPWIcon", &vtIcon, NULL);
if SUCCEEDED(hr)
{
nIndex = vtIcon.lVal;
}
線上列印精靈 MRU 屬性
Windows Vista Online 列印精靈會定義三個與最近使用 (MRU) 線上列印零售商相關的屬性。
屬性名稱 | 屬性值/函式 |
---|---|
MRUIcon | 您可以從此屬性讀取最近使用之線上列印零售商的圖示索引。 |
MRUName | 您可以從此屬性讀取最近使用之線上列印零售商的名稱。 |
UseMRU | VARIANTVT_BOOL值,指出精靈是否應該略過線上列印零售商選取頁面,並只改用最近使用的線上列印零售商。 將此屬性設定為 VARIANT_TRUE 略過零售商選取頁面。 |
下列程式碼範例示範如何設定 UseMRU 屬性,讓 Windows Vista Online 列印精靈略過線上列印零售商選取頁面,並自動選取最近使用的零售商。
// A data object that contains the list of photos to order prints for.
IDataObject* pDataObject;
// Create the Online Printing Wizard drop target.
CComPtr<IDropTarget> spDropTarget;
HRESULT hr = CoCreateInstance(CLSID_PublishDropTarget,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&spDropTarget));
// Set the UserMRU property to true to skip retailer selection and use
// the MRU retailer instead.
CComQIPtr<IPropertyBag> spPropsBag(spDropTarget);
if(spPropsBag)
{
VARIANT varTrue = {0};
varTrue.vt = VT_BOOL;
varTrue.boolVal = VARIANT_TRUE;
spPropsBag->Write(L"UseMRU", &varTrue);
}
// 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);
下列程式碼範例示範如何讀取 MRUName 和 MRUIcon 屬性。
// Create the Online Printing Wizard drop target.
CComPtr<IDropTarget> spDropTarget;
HRESULT hr = CoCreateInstance(CLSID_PublishDropTarget,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&spDropTarget));
// Get the Online Printing Wizard properties.
CComPtr<IPropertyBag> spPropsBag;
spDropTarget->QueryInterface(IID_PPV_ARGS(&spPropsBag));
CComVariant vtMRUName, vtMRUIconIndex;
CComBSTR bstrMRUName;
int nMRUIconIndex;
// Get the MRU name value.
hr = spPropsBag->Read(L"MRUName", &vtMRUName, NULL);
if SUCCEEDED(hr)
{
bstrMRUName = vtMRUName.bstrVal;
}
// Get the MRU icon index value.
hr = spPropsBag->Read(L"MRUIcon", &vtMRUIconIndex, NULL);
if SUCCEEDED(hr)
{
nMRUIconIndex = vtMRUIconIndex.lVal;
}