WebBrowser denetimi ana bilgisayar, genellikle varsayılan üstbilgiler ve altbilgiler yazdırılan bir HTML belgesi için geçersiz kılmak gerekebilir. Yapılandırmasını sağlayan, üstbilgiler ve altbilgiler özelleştirmek, yazıcı şablonları, Microsoft ınternet Explorer 5.5 desteklemesine rağmen ınternet Explorer sürüm 4.0 ve sonraki sürümler üstbilgiler ve altbilgiler özelleştirmenin IWebBrowser2::ExecWB yönteminin kullanılmasını.
bir OLECMDID numaralandırma OLECMDID_PRINT öğenin ExecWB yöntemi ile birlikte kullandığınızda, VARIANT bağımsız değişkeni pvaIn aracılığıyla SAFEARRAY yapısında geçirilmesi tarafından genişletilmiş, yazdırma bilgilerini belirtebilirsiniz. Bu <a0>SAFEARRAY</a0> veri türü en çok beş madde alır:
Özel bir üstbilgi içeren BIR dize (BSTR).
Özel Altbilgi içeren BIR dize (BSTR).
Bir "isteğe bağlı üstbilgi olarak." hizmet verdiği bir HTML dosyasını içeren ıstream nesne Bu, yazdırdığınız zaman, Microsoft Outlook ve Microsoft Outlook Express e-posta iletileri Bkz: e-posta üstbilgisi olacaktır. Bu ıstream nesnenin tam ve geçerli HTML belgeye göstermelidir HTML biçimine parçaları veya yanlış yazdırır.
Belge için kullanılacak alternatif bir URL. Bu yalnızca, Outlook ve Outlook Express için uygundur.
Bir yazıcıyı yapılandırmak için yazdırma bayraklar (dwFlags). Bu yalnızca, Outlook ve Outlook Express için uygundur.
Bir <a0>Yazdır</a0> menü komutu için bir olay işleyicisi, aşağıdaki Microsoft Visual C++ kod bir Visual C++ WebBrowser ana bilgisayar gösterir. Kod, çok basit bir üstbilgi, altbilgi ve isteğe bağlı üstbilgi değerleri üzerinde odaklanır.
LRESULT CWebOCWindow::OnPrint(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
SAFEARRAYBOUND psabBounds[1];
SAFEARRAY *psaHeadFoot;
HRESULT hr = S_OK;
// Variables needed to send IStream header to print operation.
HGLOBAL hG = 0;
IStream *pStream= NULL;
IUnknown *pUnk = NULL;
ULONG lWrote = 0;
LPSTR sMem = NULL;
if (!webOC) {
ATLTRACE(_T("DoPrint: Cannot print - WebBrowser control not ready\n"));
goto cleanup;
}
// Initialize header and footer parameters to send to ExecWB().
psabBounds[0].lLbound = 0;
psabBounds[0].cElements = 3;
psaHeadFoot = SafeArrayCreate(VT_VARIANT, 1, psabBounds);
if (NULL == psaHeadFoot) {
// Error handling goes here.
goto cleanup;
}
VARIANT vHeadStr, vFootStr, vHeadTxtStream;
long rgIndices;
VariantInit(&vHeadStr);
VariantInit(&vFootStr);
VariantInit(&vHeadTxtStream);
// Argument 1: Header
vHeadStr.vt = VT_BSTR;
vHeadStr.bstrVal = SysAllocString(L"This is my header string.");
if (vHeadStr.bstrVal == NULL) {
goto cleanup;
}
// Argument 2: Footer
vFootStr.vt = VT_BSTR;
vFootStr.bstrVal = SysAllocString(L"This is my footer string.");
if (vFootStr.bstrVal == NULL) {
ATLTRACE(_T("DoPrint: Could not allocate memory in %s: Line %d\n"), __FILE__, __LINE__);
goto cleanup;
}
// Argument 3: IStream containing header text. Outlook and Outlook
// Express use this to print out the mail header.
if ((sMem = (LPSTR)CoTaskMemAlloc(512)) == NULL) {
ATLTRACE(_T("DoPrint: Could not allocate memory in %s: Line %d\n"), __FILE__, __LINE__);
goto cleanup;
}
// We must pass in a full HTML file here, otherwise this
// becomes corrupted when we print.
sprintf(sMem, "<html><body><strong>Printed By:</strong> Custom WebBrowser Host 1.0<p></body></html>\0");
// Allocate an IStream for the LPSTR that we just created.
hG = GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, strlen(sMem));
if (hG == NULL) {
ATLTRACE(_T("DoPrint: Could not allocate memory in %s: Line %d\n"), __FILE__, __LINE__);
goto cleanup;
}
hr = CreateStreamOnHGlobal(hG, TRUE, &pStream);
if (FAILED(hr)) {
ATLTRACE(_T("OnPrint::Failed to create stream from HGlobal: %lX\n"), hr);
goto cleanup;
}
hr = pStream->Write(sMem, strlen(sMem), &lWrote);
if (SUCCEEDED(hr)) {
// Set the stream back to its starting position.
LARGE_INTEGER pos;
pos.QuadPart = 0;
pStream->Seek((LARGE_INTEGER)pos, STREAM_SEEK_SET, NULL);
hr = pStream->QueryInterface(IID_IUnknown, reinterpret_cast<void **>(&pUnk));
vHeadTxtStream.vt = VT_UNKNOWN;
vHeadTxtStream.punkVal = pUnk;
}
rgIndices = 0;
SafeArrayPutElement(psaHeadFoot, &rgIndices, static_cast<void *>(&vHeadStr));
rgIndices = 1;
SafeArrayPutElement(psaHeadFoot, &rgIndices, static_cast<void *>(&vFootStr));
rgIndices = 2;
SafeArrayPutElement(psaHeadFoot, &rgIndices, static_cast<void *>(&vHeadTxtStream));
//NOTE: Currently, the SAFEARRAY variant must be passed by using
// the VT_BYREF vartype when you call the ExecWeb method.
VARIANT vArg;
VariantInit(&vArg);
vArg.vt = VT_ARRAY | VT_BYREF;
vArg.parray = psaHeadFoot;
hr = webOC->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, &vArg, NULL);
if (FAILED(hr)) {
ATLTRACE(_T("DoPrint: Call to WebBrowser's ExecWB failed: %lX\n"), hr);
goto cleanup;
}
return 1;
//WebBrowser control will clean up the SAFEARRAY after printing.
cleanup:
VariantClear(&vHeadStr);
VariantClear(&vFootStr);
VariantClear(&vHeadTxtStream);
if (psaHeadFoot) {
SafeArrayDestroy(psaHeadFoot);
}
if (sMem) {
CoTaskMemFree(sMem);
}
if (hG != NULL) {
GlobalFree(hG);
}
if (pStream != NULL) {
pStream->Release();
pStream = NULL;
}
bHandled = TRUE;
return 0;
}
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:267240
(http://support.microsoft.com/kb/267240/en-us/
)
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.