Member 13916604 Ответов: 1

Наследовать проблему setactiveview


Привет,

У меня есть старый проект MFC на C++ в VS NET 2003, и у меня есть следующая проблема.

Мой проект-это SDI, в котором я помещаю SplitterWnd, чтобы иметь два вида.
И я хотел бы обнаружить изменение активации представления, чтобы выполнить некоторые активации/деактивации.

Как кажется, чтобы соответствовать именно то, что я ищу, я попытался унаследовать от cframewnd::SetActiveView(от cview* pViewNew, БООЛ bNotify) по моему под названием cmainframe (публичных производный от cframewnd) в общественных как следовать:

в .ч:
общественный:
void SetActiveView(CView* pViewNew, BOOL bNotify = TRUE);

в .СРР:
void CMainFrame::SetActiveView(CView* pViewNew, BOOL bNotify)
{
Звуковой сигнал (440, 200);
CFrameWnd::SetActiveView(pViewNew, bNotify);
}

И моя функция никогда не вызывается; CFrameWnd::SetActiveView() остается той, которая вызывается.

Может быть, есть обработчик сообщений или что-то еще добавить? или конкретное ограничение/несовместимость/ошибка?

Это должно быть легко, но.....

Заранее благодарю вас за вашу помощь,
Эрик

Что я уже пробовал:

Наследовать CFrameWnd::SetActiveView()

1 Ответов

Рейтинг:
2

Richard MacCutchan

Глядя на документацию: CFrameWnd Класс[^], это не виртуальная функция, а значит, она не может быть переопределена.


Member 13916604

Спасибо тебе, Ричард, за твой ответ.
В этом случае, знаете ли вы другой способ быть информированным об изменении вида моего окна splitter?

Richard MacCutchan

Извините, понятия не имею, но я уже давно не пользовался МФЦ. Вы можете попробовать поискать в Google, чтобы узнать, нашел ли кто-нибудь еще способ или есть ли что-то в классе CDocument, что может помочь.

Member 13916604

Чтобы держать вас в курсе, я реализовал OnActivateView в своем представлении и отправил сообщение на мэйнфрейм.
Я не знаю, является ли это самым умным и чистым решением, но... оно работает :)

Richard MacCutchan

Ну, это то, что важно. Удачи.