Re: CRichEditCtrl contents from RTF file
Goran wrote:
On Apr 27, 4:20 pm, Hector Santos <sant9...@nospam.gmail.com> wrote:
The problem with the particular code you have is that it doesn't
support reading a RTF file saved as UNI-GARBAGE A.K.A UNICODE.
It appears you need to convert each block read in into multi-byte
array. It works find when the RTF file is not stored in unicode.
Indeed, my file was not stored as unicode. But how do I save it so?
(Wordpad or swriter do not offer an easy option, e.g. something on the
menu, or in "save as" dialog).
Goran.
I tried Write.exe "save as" but it saves it as Unicode Code text
removing the RTF stuff.
I tried NotePad++ utility and it wasn't reading it right to begin with
so I wrote a quicky "ConvertToUnicode.cpp"
// File: G:\wc7beta\convert2unicode.cpp
#include <stdio.h>
#include <afx.h>
BYTE bom[2] = {0xFF,0xFE};
void main(char argc, char *argv[])
{
FILE *fvi = fopen("active-api.rtf","rt"); // ansi original
FILE *fvo = fopen("active-api-unc.rtf","wb");
fwrite(bom,sizeof(bom),1,fvo);
char sz[1024] = {0};
while (fgets(sz,sizeof(sz),fvi)) {
for (int i = 0; i < strlen(sz); i++) {
char szo[2] = {0};
szo[0] = sz[i];
fwrite(szo,sizeof(szo),1,fvo);
}
}
fclose(fvo);
fclose(fvi);
}
With this I was able to correctly read in active-api-unc.rtf but the
callback has to convert each block it reads into a multi-byte array.
I am not an expert yet with this unicrap but for the proof of concept:
static DWORD CALLBACK MyStreamInCallbackW(DWORD dwCookie, LPBYTE
pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*)(DWORD_PTR)dwCookie;
BYTE *p = new BYTE[cb];
ZeroMemory(p,cb);
*pcb = pFile->Read(p, cb);
int n = 0;
for (int w = 0; w < *pcb;) {
pbBuff[n] = p[w];
w += 2;
n++;
}
delete p;
TRACE("MyStreamInCallback: cb: %d | pcb: %d | n: %d\n",
cb, *pcb, n);
*pcb = n;
return 0;
}
What I would like to figure out is what CRichEditCtrl expects for
UNICODE with the SF_XXXXXX StreamIn() option.
I also found a reference that about changing the control type in the
resource file to "RichEdit20W"
CONTROL "",IDC_RICHEDIT23,"RichEdit20W",ES_MULTILINE |
ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,161,456,95
But that didn't work to read it in without having to convert it myself.
--
HLS