Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение CEdit, Срочно нужна помощь... 
:(
    Опции темы
Алексеу
Дата 26.6.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, господа!

Нужно срочно написать программу типа блокнотика, однако застопорился на одной детали, которая никак не дает продвинуться в функционале - нужно чтобы в блокнотике работало контекстное меню своего образца. По умолчанию у CEdit свое контекстное меню. Его нужно убрать и заменить собственным. Для этого нужно переопределить класс CEdit, унаследовав его. Однако как это сделать?

Вот так мы его наследуем:

class EdBox : public CEdit
{
...
}

а что нужно делать внутри чтобы убрать контекстное меню и поставить свое? 
Я просто в тупике...

Буду очень благодарен за любую подсказку.
PM MAIL   Вверх
voov
Дата 26.6.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



если нужна програмка типа блокнотика, то зачем эдит?
По-моему, проще сделать проект типа SDI и класс представления унаследовать от CEditView или CRichEditView.
Так объем работы будем меньше, а функциональность программки больше
PM MAIL   Вверх
Алексеу
Дата 26.6.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



voov, к сожалению програмка учебная и нужно ее сотворить именно на основе CEdit, а вот как убрать стандартное меню...  smile 
PM MAIL   Вверх
tonchitos
Дата 26.6.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну так в чем проблема - переопределите функцию контекстного меню, и в нем работайте со своим меню... главное ф-ию базового класса не вызывайте...


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
Алексеу
Дата 26.6.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



tonchitos, а можете показать приблизительно как это делать? Собственно, для того и совета попросил т.к. не могу сделать этого...
PM MAIL   Вверх
tonchitos
Дата 26.6.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



типа такого, вот набросок:

Код


class myEdit: public CEdit
{
    DECLARE_DYNAMIC(myEdit)
// Constructors
public:
    myEdit();
    BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

    CMenu m_PopupMenu;
// Operations
    virtual void OnInitialUpdate(); // called first time after construct

    afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos)
    {
        m_PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, pos.x, pos.y, AfxGetMainWnd());
    }

// Implementation
public:
    // virtual OK here - ~CWnd already virtual
    virtual ~myEdit();
};

void myEdit::OnInitialUpdate()
{
    m_PopupMenu.LoadMenu(IDR_CONTEXT);
        ASSERT(m_PopupMenu!=NULL);
}


всю фигню типа карты сообщений и прочего напишешь сам?


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
voov
Дата 26.6.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Код

void EdBox::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
    CMenu menu;
    menu.LoadMenu(IDR_MENU_CONTEXT);

    CMenu* pPopup = menu.GetSubMenu(0);

    ASSERT(pPopup != NULL);

    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}


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


 




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


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

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