Group:  Microsoft Outlook ยป microsoft.public.outlook.program_addins
Thread: RTF in an outlook appointment item

Geek News

RTF in an outlook appointment item
"Daniel" <dgrillo[ at ]radvision.com> 4/4/2007 3:59:46 PM
I'm trying to put RTF formatted text into the body of an appointment item.
I've found various examples on the web but I'm still having some problems.
Using Outlook spy, I can see that the code I use below does indeed put rtf
into the PR_RTF_COMPRESSED property. Yet I see nothing in the body. Does
anyone see anything wrong with what I'm doing below?


m_pAppointment is an Outlook::_AppointmentItem
m_pWrapRTFStream is a pointer to WrapCompressedRTFStream. Typedef is below
m_pRTFSync if a pointer to RTFSync. Typedef is below

typedef HRESULT (STDAPICALLTYPE *PwrapCompressedRTFStreamPtr)(
LPSTREAM lpCompressedRTFStream,
ULONG ulFlags,
LPSTREAM* lppUncompressedRTFStream);

typedef HRESULT (STDAPICALLTYPE *pRTFSyncPtr)(
LPMESSAGE lpMessage,
ULONG ulFlags,
BOOL* lpbMessageUpdated
);


--------------code starts
CComPtr<IUnknown> pUnk;
CComPtr<IStream> lpStreamRTFCompDest = NULL;
CComPtr<IStream> lpStreamRTFDest = NULL;
ULONG cbRead = 0;
BOOL fUpdated = FALSE ;

hr = m_pAppointment->get_MAPIOBJECT (&pUnk);
if (SUCCEEDED(hr))
{
CComPtr<IMessage> pMessage;
hr = pUnk->QueryInterface(IID_IMessage, (void **)&pMessage);

if (SUCCEEDED(hr))
{
hr = pMessage->OpenProperty(PR_RTF_COMPRESSED, // property to open
&IID_IStream,
0,
MAPI_CREATE | MAPI_MODIFY | MAPI_DEFERRED_ERRORS,
(LPUNKNOWN *)&lpStreamRTFCompDest);


if (SUCCEEDED(hr))
{
hr = m_pWrapRTFStream(lpStreamRTFCompDest,
MAPI_MODIFY | STORE_UNCOMPRESSED_RTF,
&lpStreamRTFDest);

CComBSTR rtStr(TEXT("{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss
Helvetica;}\\f0\\par This is some {\\b bold} text.\\par}"));
hr = lpStreamRTFDest->Write(rtStr, rtStr.ByteLength(), &cbRead);
hr = lpStreamRTFDest->Commit(STGC_OVERWRITE) ;
hr = m_pRTFSync(pMessage, RTF_SYNC_RTF_CHANGED, &fUpdated);
}
}

}


Re: RTF in an outlook appointment item
"Daniel" <dgrillo[ at ]radvision.com> 4/4/2007 5:36:39 PM
Well part of the problem is incorrectly formatted text. Changing the text
and how I write it to below, gives me text which I can read more clearly in
OutlookSpy. But still nothing in the body of the appointment.

LPSTR cRTF= "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\par This
is some {\\b bold} text.\\par}";

hr = lpStreamRTFDest->Write(cRTF, strlen(cRTF), &cbRead);




"Daniel" <dgrillo[ at ]radvision.com> wrote in message
news:uaaiFJtdHHA.1868[ at ]TK2MSFTNGP04.phx.gbl...
[Quoted Text]
> I'm trying to put RTF formatted text into the body of an appointment
> item. I've found various examples on the web but I'm still having some
> problems. Using Outlook spy, I can see that the code I use below does
> indeed put rtf into the PR_RTF_COMPRESSED property. Yet I see nothing in
> the body. Does anyone see anything wrong with what I'm doing below?
>
>
> m_pAppointment is an Outlook::_AppointmentItem
> m_pWrapRTFStream is a pointer to WrapCompressedRTFStream. Typedef is
> below
> m_pRTFSync if a pointer to RTFSync. Typedef is below
>
> typedef HRESULT (STDAPICALLTYPE *PwrapCompressedRTFStreamPtr)(
> LPSTREAM lpCompressedRTFStream,
> ULONG ulFlags,
> LPSTREAM* lppUncompressedRTFStream);
>
> typedef HRESULT (STDAPICALLTYPE *pRTFSyncPtr)(
> LPMESSAGE lpMessage,
> ULONG ulFlags,
> BOOL* lpbMessageUpdated
> );
>
>
> --------------code starts
> CComPtr<IUnknown> pUnk;
> CComPtr<IStream> lpStreamRTFCompDest = NULL;
> CComPtr<IStream> lpStreamRTFDest = NULL;
> ULONG cbRead = 0;
> BOOL fUpdated = FALSE ;
>
> hr = m_pAppointment->get_MAPIOBJECT (&pUnk);
> if (SUCCEEDED(hr))
> {
> CComPtr<IMessage> pMessage;
> hr = pUnk->QueryInterface(IID_IMessage, (void **)&pMessage);
>
> if (SUCCEEDED(hr))
> {
> hr = pMessage->OpenProperty(PR_RTF_COMPRESSED, // property to open
> &IID_IStream,
> 0,
> MAPI_CREATE | MAPI_MODIFY | MAPI_DEFERRED_ERRORS,
> (LPUNKNOWN *)&lpStreamRTFCompDest);
>
>
> if (SUCCEEDED(hr))
> {
> hr = m_pWrapRTFStream(lpStreamRTFCompDest,
> MAPI_MODIFY | STORE_UNCOMPRESSED_RTF,
> &lpStreamRTFDest);
>
> CComBSTR rtStr(TEXT("{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss
> Helvetica;}\\f0\\par This is some {\\b bold} text.\\par}"));
> hr = lpStreamRTFDest->Write(rtStr, rtStr.ByteLength(),
> &cbRead);
> hr = lpStreamRTFDest->Commit(STGC_OVERWRITE) ;
> hr = m_pRTFSync(pMessage, RTF_SYNC_RTF_CHANGED, &fUpdated);
> }
> }
>
> }
>


Home | Search | Terms | Imprint Contact
Newsgroups Reader - provided by WiredBox.Net