Re: BITMAP в CRichEditCtrl
От: ryazantsev_iv  
Дата: 09.09.05 12:42
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

Здравствуйте, Carc, Вы писали:

C>как вставить картинку в CRichEditCtrl из файла (битмап)? я посмотрел примеры с codeguru, codeproject. Но если файл сохранить в ртфе, а потом прочитать, то картинка не отображается заново. А если в том же ворде в ртф файл вставить картинку, сохранить и прочесть файл в CRichEditView, то всё отображается нормально. В чем дело? Куда копать? Почему сохранненный файл с картинкой не отображается после открытия.


Попробуй пропустить через функцию .....


pFile — указатель на CFile или CMemFile, и не забудь про заголовки RTF формата

void CRTFCommand::AddBitmap(CBitmap *m_bmp)
{
    int nCount;
    if (m_bmp != NULL && isOpen)
    {
        BITMAP m_Bitmap;
        m_bmp->GetBitmap(&m_Bitmap);
        
        CString strBitmap;
        strBitmap.Format("{\\pict\\wbitmap0\\pich%d\\picw%d\\wbmbitspixel%d\\wbmplanes%d\\wbmwidthbytes%d\\bin ",m_Bitmap.bmHeight, m_Bitmap.bmWidth, m_Bitmap.bmBitsPixel, m_Bitmap.bmPlanes, m_Bitmap.bmWidthBytes);
        nCount = strBitmap.GetLength();
        pFile->Write(strBitmap.GetBuffer(), nCount);
        strBitmap.ReleaseBuffer();

        DWORD dwSizeImage = m_Bitmap.bmHeight * m_Bitmap.bmWidthBytes;
        BYTE *lpBits = new BYTE[dwSizeImage];
        m_bmp->GetBitmapBits(dwSizeImage, lpBits);
        register char sBit[3];
        sBit[0] = sBit[1] = sBit[2] = '0';
        char *pFullBits = NULL;
        if (bMemOpenFile)
        {
            pFullBits = new char[dwSizeImage *2 + 1];
            strcpy(pFullBits, "");
        }
        for(int i = 0; i < dwSizeImage; i++)
        {        
            sprintf(sBit,"%x",lpBits[i]);
            if (sBit[1] == '\0')
            {
                sBit[2] = '\0';
                sBit[1] = sBit[0];
                sBit[0] = '0';
            }
            if (bMemOpenFile)
            {
                pFullBits[i * 2] = sBit[0];
                pFullBits[i * 2 + 1] = sBit[1];
            }
            else
                pFile->Write(sBit, 2);
        }
        if (bMemOpenFile)
        {
            pFullBits[(dwSizeImage - 1) * 2 + 2] = '\0';
            pFile->Write(pFullBits, dwSizeImage *2);
            delete[] pFullBits;
        }

        delete[] lpBits;

        strBitmap.Format("}\\par ");
        nCount = strBitmap.GetLength();
        pFile->Write(strBitmap.GetBuffer(), nCount);
        strBitmap.ReleaseBuffer();
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.