Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RichEdit 
:(
    Опции темы
GetProcAddress
Дата 11.4.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.1.2010

Репутация: нет
Всего: нет



Создал приложение с использованием RichEdit.
После запуска все хорошо, можно набирать и редактировать текст, но при открытии текстового файла, после загрузки документа я не могу редактировать, добавлять к тексту ничего, если выделю кусок текста, то могу вместо него набрать другой, а на месте пробелов переводов каретки ничего не могу добавить или изменить, в общем работает как то странно, подскажите в чем может быть проблема. Использую VS 6.
Код:
Код

#include "afxwin.h" // MFC
#include <afxrich.h> //êîìïîíåíò RichEdit
#include "resource.h"
#define IDC_MYRICHEDIT 102    // Èäåíòèôèêàòîð RichEdit

class CMyWnd : public CFrameWnd
{
public:
    CMyWnd();
    int OnCreate(LPCREATESTRUCT lpCreateStruct);    // ñîçäàíèå îêíà
    void MenuOpen();    // Ïðîöåäóðà ðåàêöèè íà îòêðûòü ôàéë
    static DWORD CALLBACK REStrCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG FAR *pcb)
{
    CFile* File = (CFile*)dwCookie; 
    *pcb = File->Read(pbBuff, cb);
    return 0;
}
    ~CMyWnd();
private:
    CMenu m_wndMenu;
    CRichEditCtrl* MyRichEdit;    // Óêàçàòåëü íà RichEdit
    DECLARE_MESSAGE_MAP();// òàáëèöà îòêëèêîâ
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
    ON_WM_CREATE()            // ñîáûòèå ñîçäàíèÿ îêíà
    ON_COMMAND(ID_FILEOPEN,MenuOpen)    //îáðàáîòêà ðåàêöèè íà âûáîð ìåíþ
END_MESSAGE_MAP()


CMyWnd::CMyWnd()
{
    Create(NULL,"Nina",WS_OVERLAPPEDWINDOW,rectDefault,
        NULL,NULL);
    MyRichEdit = new CRichEditCtrl();
    MyRichEdit->Create(ES_MULTILINE|WS_VISIBLE|WS_CHILD|WS_BORDER,CRect(0,0,700,600),this,IDC_MYRICHEDIT);
}

int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)  return -1; 
    m_wndMenu.LoadMenu(IDR_MENU);
    SetMenu(&m_wndMenu);
    return 0;
}

void CMyWnd::MenuOpen()
{
    CFileDialog fileDialog(TRUE,NULL,"*.txt");    //îáúåêò êëàññà âûáîðà ôàéëà
    int result = fileDialog.DoModal();    
    if (result==IDOK)
    {
        CStdioFile FileRead(fileDialog.GetPathName(), CFile::modeRead | CFile::typeBinary);
        EDITSTREAM estr;
        estr.dwCookie = (DWORD) &FileRead; 
        estr.dwError = 0; 
        estr.pfnCallback = &REStrCallback;
        MyRichEdit->StreamIn(SF_TEXT, estr);
        FileRead.Close();
    }
}

class CMyApp : public CWinApp
{
public:
    CMyApp();
    virtual BOOL InitInstance();// èíèöèàëèçàöèÿ
};

CMyApp::CMyApp()
{}

CMyWnd::~CMyWnd()
{
    if (MyRichEdit!=NULL) delete MyRichEdit;    // óäàëèòü äèíàìè÷åñêèé îáúåêò
}

BOOL CMyApp::InitInstance()
{
    m_pMainWnd=new CMyWnd();
    ASSERT(m_pMainWnd);
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
};

CMyApp theApp;



PM MAIL   Вверх
Albor
Дата 11.4.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Попробуй вызвать для RichEdit GetLimitText() , похоже на то, что ограничен размер ввода.
PM MAIL ICQ   Вверх
GetProcAddress
Дата 11.4.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.1.2010

Репутация: нет
Всего: нет



Да очень похоже (если получить длинну она оказывается лимитированной и равна  20222931), НО при попытке установить длинну в ноль, таккое впечатление, что редактор переходит в режим "только чтение" , поскольку вообще перестает реагировать на все, при попытке изменить режим "только чтение", ничего не происходит:

long nChars=0;
BOOL bReadOnly=FALSE;

MyRichEdit->LimitText(nChars);
MyRichEdit->SetReadOnly(bReadOnly);

Получается, что бы выяснить причину нужно получить все режимы и стили?

Частично разобрался, если увеличить лимит, то все нормально, а как убрать лимит, вышеприведенный способ не работает.

Это сообщение отредактировал(а) GetProcAddress - 11.4.2011, 12:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.