Всем привет!
Как пишут в MSDN, чтобы напечатать колонтитулы из CHtmlView нужно вызвать
IOleCommandTarget -> Exec(...) или IWebBrowser2 -> ExecWB(...) с параметром IDM_PRINT, и параметром pvaIn — массивом VT_ARRAY|VT_VARIANT, в котором первые 2 параметра и есть BSTR-значения колонтитулов
Делаю так:
class cSCTextView : public CHtmlView...
.
.
.
В cSCTextView::OnInitialUpdate() вызываю:
void cSCTextView::InitPrintParam( )
{
///////////////////////////////////////////////////////////////////////////
//Создаем безопасный массив для передачи
//в качестве аргумента функции Exec
SAFEARRAY * pSA = NULL;
SAFEARRAYBOUND bounds;
bounds.lLbound = 0;
bounds.cElements = 5;
//создаем массив
pSA = ::SafeArrayCreate(VT_VARIANT, 1, &bounds );
if( !pSA )
{
VariantInit( &( this -> m_vaPrintIn ) );
this -> m_vaPrintIn.vt = VT_EMPTY;
}
else
{
VARIANT vHead, vFoot, vStream, vMSHTML, vFlags;
//заполняем массив
//Page Header
VariantInit( &vHead );
vHead.vt = VT_BSTR;
vHead.bstrVal = ::SysAllocString(L"&b&bСтраница &p");
long i = 0;
HRESULT hr = ::SafeArrayPutElement( pSA, &i, &vHead );
ASSERT( hr == S_OK );
//Page Footer
VariantInit( &vFoot );
CString strFooter;
strFooter.LoadString( IDS_TEXT_FOOTER );
vFoot.vt = VT_BSTR;
vFoot.bstrVal = strFooter.AllocSysString( );
i = 1;
hr = ::SafeArrayPutElement( pSA, &i, &vFoot );
ASSERT( hr == S_OK );
//address of an IStream pointer for a
//Microsoft Outlook Express header document
VariantInit( &vStream );
vStream.vt = VT_BSTR;
vStream.bstrVal = NULL;
i = 2;
hr = ::SafeArrayPutElement( pSA, &i, &vStream );
ASSERT( hr == S_OK );
//alternate URL, used for MS's HTML parsing and
//rendering engine in Outlook Express
VariantInit( &vMSHTML );
vMSHTML.vt = VT_BSTR;
vMSHTML.bstrVal = NULL;
i = 3;
hr = ::SafeArrayPutElement( pSA, &i, &vMSHTML );
ASSERT( hr == S_OK );
//flags
VariantInit( &vFlags );
vFlags.vt = VT_I2;
vFlags.uiVal = 0;
i = 4;
hr = ::SafeArrayPutElement( pSA, &i, &vFlags );
ASSERT( hr == S_OK );
//упаковываем массив в VARIANT
VariantInit( &( this -> m_vaPrintIn ) );
this -> m_vaPrintIn.vt = VT_ARRAY | VT_VARIANT;
this -> m_vaPrintIn.parray = pSA;
}
}
В результате моих колонтитулов — нет!!! Установлен Internet Explorer 6.0.
Подозреваю, что может где-то массив неправильно заполняю, какие у кого соображения будут?