На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Почему в CEditView не редактируется и не появляется никакой текст ?
    Доброе утро!
    Я создал в Visual Studio 2019 проект MFC с view типа CView.
    Тип приложения - несколько документов, стиль = MFC Standard.
    Далее заменил базовый класс view с CView на CEditView, чтобы получить редактор.

    Как все выглядит на экране - см. скриншот (дерево слева к вопросу здесь не относится).
    Больше никаких замен в CView не делал.

    Я ожидал, что замена на CEditView приведет к тому, что в новых документах (на скриншоте - 3 новых документа во вкладках, появится "редакторы", в которых можно будет набирать текст.

    Однако текст не набирается.

    Вопросы: почему редактор "не активируется" ? Что еще необходимо сделать, чтобы редактор стал работать ?
    Как установить в редакторе какой-либо текст, который будет редактироваться ?


    Прикреплённая картинка
    Прикреплённая картинка
    Прикреплённая картинка
    Прикреплённая картинка


    -------------------- Результат замены класса: -------------------

    class CTestMFCEmptyView : public CEditView --- в объявлении замена базового класса только здесь !
    {
    protected: // создать только из сериализации
    CTestMFCEmptyView() noexcept;
    DECLARE_DYNCREATE(CTestMFCEmptyView)

    // Атрибуты
    public:
    CTestMFCEmptyDoc* GetDocument() const;

    // Операции
    public:

    // Переопределение
    public:
    virtual void OnDraw(CDC* pDC); // переопределено для отрисовки этого представления
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    protected:
    virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
    virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

    // Реализация
    public:
    virtual ~CTestMFCEmptyView();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endif

    protected:

    // Созданные функции схемы сообщений
    protected:
    DECLARE_MESSAGE_MAP()
    };

    ---------------------- замена в карте сообщений ----------------------------
    // было - CView, заменено на - CEditView

    IMPLEMENT_DYNCREATE(CTestMFCEmptyView, CEditView)

    BEGIN_MESSAGE_MAP(CTestMFCEmptyView, CEditView)
    // Стандартные команды печати
    ON_COMMAND(ID_FILE_PRINT, &CEditView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, &CEditView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CEditView::OnFilePrintPreview)
    END_MESSAGE_MAP()
      1. CEditView имеет дефолтовые ограничения на размер редактируемого текста. Лучше использовать CRichEditView
      2. Для доступа к редактируемому тексту надо получить доступ к внутреннему CEdit через GetEditCtrl()
      3. Лучше приложить свой проект. По одним заголовкам сказать сложно что вы не проинициализировали.
        sharky72, архив с проектом прилагаю.

        TestMFC_EmptyView.h - здесь объявлен наследник CEditView, он никакой исходный текст не загружает и не позволяет что-либо вводить на экране.
        TestMFC_EmptyView.cpp - реализация методов класса.

        Документ к этому view - TestMFC_EmptyDoc.h/cpp - документ я не использую.

        MainFrm_Empty.h/cpp - главный фрейм проекта.

        Ctrl-N создает документ и view к нему, открываются вкладки с именами TestMfcEmpty1, 2, ...

        Дерево не относится к этому вопросу, вопрос по нему в дрйго ветке.

        Посмотрите, пожалуйста, если можно.

        Прикреплённый файлПрикреплённый файлTestMFC_Empty.rar (107,66 Кбайт, скачиваний: 9)
          Потому что наследуемый метод должен вызывать родительский. У вас нарушена иерархия инициализации окна

          ExpandedWrap disabled
            BOOL CTestMFCEmptyView::PreCreateWindow(CREATESTRUCT& cs)
            {
                // TODO: изменить класс Window или стили посредством изменения
                //  CREATESTRUCT cs
             
                return CEditView::PreCreateWindow(cs);
            }


          Прикреплённая картинка
          Прикреплённая картинка


          Добавлено
          И текст надо добавляеть не в OnDraw() это вообще для другого. А в OnInitialUpdate


          ExpandedWrap disabled
            class CTestMFCEmptyView : public CEditView
            {
               ...
               void OnInitialUpdate() override;
               ...
            }
             
            void CTestMFCEmptyView::OnInitialUpdate()
            {
                CString temp = L"qqqqqqqqqq";
                CEdit& ctrl = GetEditCtrl();
                ctrl.SetWindowText(temp);
            }
          Сообщение отредактировано: sharky72 -
            Цитата sharky72 @
            Потому что наследуемый метод должен вызывать родительский. У вас нарушена иерархия инициализации окна


            Да, действительно!
            В принципе я знаю об этом, но надо было отследить ВСЕ вхождения CView.
            Спасибо, что подметили!

            Цитата sharky72 @
            И текст надо добавлять не в OnDraw() это вообще для другого. А в OnInitialUpdate


            Спасибо, учту!
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0566 ]   [ 20 queries used ]   [ Generated: 31.10.25, 03:48 GMT ]