Richedit problems
I'm making a richedit control in mfc and i'm encountering a few problems. Let
me first situate the problem.
The control is subclassed as such
BOOL CSodeXRichTextCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszClass = _T("RichEdit20W");
.......
return COleControl::PreCreateWindow(cs);
}
I've implemented a SelRTF property:
DWORD CALLBACK CSodeXRichTextCtrl::EditStreamCallback(DWORD_PTR dwCookie,
LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *pstr = (CString *)dwCookie;
USES_CONVERSION;
if( pstr->GetLength() < cb )
{
*pcb = pstr->GetLength();
memcpy(pbBuff, T2CA((LPCTSTR)*pstr), *pcb );
pstr->Empty();
}
else
{
*pcb = cb;
memcpy(pbBuff, T2CA((LPCTSTR)*pstr), *pcb );
*pstr = pstr->Right( pstr->GetLength() - cb );
}
return 0;
}
void CSodeXRichTextCtrl::SetSelRTF(LPCTSTR newVal)
{
USES_CONVERSION;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
rtftext = new CString(newVal);
EDITSTREAM es;
es.dwCookie = (DWORD)rtftext;
es.dwError = 0;
es.pfnCallback = (EDITSTREAMCALLBACK)&EditStreamCallback;
DWORD flags;
//is het rtf of gewone tekst
if (rtftext->Left(5).Compare(_T("{\\rtf")) == 0 ||
rtftext->Left(5).Compare(_T("{urtf")) == 0)
flags = SF_RTF | SFF_SELECTION;
else
flags = SF_TEXT | SFF_SELECTION;
::SendMessage(m_hWnd, EM_STREAMIN, (WPARAM) flags, (LPARAM) &es);
SetModifiedFlag();
}
This works perfect for rtf text and formatting. However the problem starts
when i want to stream in an image:
{\rtf1\ansi\ansicpg1252\deff0\deflang2067{\fonttbl{\f0\fnil\fcharset0 Onyx;}}
{\colortbl ;\red128\green128\blue128;}
\viewkind4\uc1\pard\cf1\f0\fs24 test
{\pict\wmetafile8\picw503\pich503\picwgoal285\pichgoal285
0100090000035f0300000000df02000000000400000003010800050000000b0200000000050000
000c0213001300030000001e0004000000070104000800000026060f000600544e505006014b00
0000410b8600ee0013001300000000001300130000000000280000001300000013000000010001
0000000000000000000000000000000000000000000000000000000000ffffff0003f8000407fe
00041fff00ff3fff80003fffc0087fffc0007fffe004ffffe004ffffe000ffffe000ffffe000ff
ffe0007fffe0007fffc0003fff80003fff80001fff000007fc000001f00000df020000410bc600
880013001300000000001300130000000000280000001300000013000000010008000000000000
0000000000000000000000000000000000000000000000ffffff00aadfff0055bfff0055bfd400
55dfff0055ffff00aadfd400557faa00559faa00aabfd400009fd400f0fbff00aa9faa00001f55
00001f7f00559fd400a4a0a00000bfd40000dfff0000bfff00003faa00005faa00553faa00555f
aa00007fd400557fd400aabfff00009faa00007faa00c0dcc00000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000010101010101020a0909
090a1e010101010101000101010101041012030414100b09070101010100010101071014031403
13031203041d0a0101010001011b1205140505140314050314031c0a0101000101120505041715
18100314031714031a0701fd0104050505180b0610151005191603140409010001030506051505
050504161716100314040b07000205050506050605050506050514050314100a42050506050506
050606050505050505140314094c040505060708090406060507080904050303103f0505060608
0c010905050608010109130314094c02050605090d0f08060605090e11080503120a3f01030606
080d0e09050606080f0d09050510024c0105050509010108060605090c0108050304013f010105
06020809020605060a090905050b01014c010102050606050605060606050505040201013f0101
010204050606060506050605040701010174010101010105030506060505030401010101010001
0101010101010203040302010101010101014c0800000026060f000600544e5050070104000000
2701ffff030000000000
}
test\par
}
The above text only shows me the word test (as it should) but isn't followed
by the image. The control seems to ignore the {pict part completely. So I get
the following output
test test
instead of
test (image) test
When I use the above rtf codes on the selRTF property of a microsoft rich
edit control ocx (vb6) the image get showed.
What aim I doing wrong?
Problem 2: when I use my control on vb form and press an arrow key to browse
trough my text it acts as a tab key and gives focus to the next tab index.
Any ideas why?
Thank you very much