mfc OnVScroll не вызывается в классе основного кадра MDI - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть проект c ++ MFC MDI, использующий сообщество visual studio 2013. Класс мэйнфреймов получен как Класс CMainFrame: общедоступный CMDIFrameWndEx

В классе мэйнфреймов перед созданием полоса прокрутки установлена, как показано ниже. cs.style | = WS_VSCROLL | WS_HSCROLL;

Добавлена ​​функция OnVScroll обратного вызова для получения обратного вызова при каждом перемещении полосы прокрутки основного кадра. ON_WM_VSCROLL() было добавлено к карте сообщений в мэйнфрейме. Мы находим, что OnVScroll никогда не вызывается. Как включить обратные вызовы на OnVScroll всякий раз, когда пользователь перемещает scrollbar. Любая помощь будет очень ценится. С уважением, Ракеш

1 Ответ

0 голосов
/ 26 апреля 2018

Обратите внимание, что полоса прокрутки для CMDIFrameWndEx не имеет смысла.

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

Поэтому, когда вы создаете основной фрейм со стилями WS_VSCROLL | WS_HSCROLL, эти стили удаляются из окна основного фрейма и передаются во внутренний класс (окно клиента MDI).

Таким образом, окно внешнего кадра никогда не получит сообщения прокрутки.

У вас есть исходный код MFC, просто посмотрите на исходный код функции CMDIFrameWnd::CreateClient! Вы найдете там поведение.

После этого CMDIClientAreaWnd получает управление через подкласс дескриптора m_hWndMDIClient в классе CMDIClientAreaWnd.

Этот класс отвечает за стиль представления MDI-Tab.

Поэтому, если вы хотите, чтобы сообщения на полосе прокрутки вы использовали классические подклассы для внутреннего окна клиента MDI.

Spy ++ может помочь вам понять структуру окна.

...