2016-04-04 2 views
0

Добрый день! Я обновляю свое приложение от CMDIFrameWnd до CMDIFrameWndEx и сталкиваюсь с проблемой клиентской области MainFrame. Перед этим у меня был m_hWndMDIClient и подкласс к нему с моим классом. Теперь у меня есть m_wndClientArea, и это приносит мне только головную боль! Теперь я не могу подкласса. Вот почему я пытался сделать это:Клиентская область CMDIFrameWndEx

mdiCliWnd_.Attach(m_wndClientArea.Detach()); 
mdiCliWnd_.Invalidate(); 
mdiCliWnd_.UpdateWindow(); 
m_wndClientArea.Attach(mdiCliWnd_.Detach()); 

Но я даже не могу проверить, как это работает, потому что теперь у меня есть проблема, что я должен дать CWnd моей клиентской области к другим функциям, но m_wndClientArea защищен , Итак, мои вопросы: могу ли я подклассифицировать свой собственный класс по-другому? Если я не могу, как я должен использовать m_wndClientArea, чтобы передать его другим функциям?

ответ

0

В чем причина этого подкласса?

Если речь идет просто о рисунке фона, использовать новую виртуальную функцию: OnEraseMDIClientArea

В противном случае это не проблема использовать стандартные подклассы.

Поскольку HWND-дескриптор окна клиента mdi уже прикреплен к объекту класса MFC CWnd, вы не можете снова использовать подкласс MFC.

+0

Основная причина заключается в использовании функций OnRButtonUp (и т.д.) в клиентской области! Я прочитал ваш ответ о «классическом подклассе» здесь - http://stackoverflow.com/questions/30209469/how-to-limit-the-number-of-mdi-tab-groups, но я не понимаю, что в частности, я должен подкласс - CMDIClientAreaWnd или CMDIFrameWndEx и как? – DmitryLazdin

+0

Вы подклассифицируете ручку не объект! m_hWndMDIClient. В чем причина обнаружения RButtonUP/Down? Контекстные меню должны быть реализованы с помощью WM_CONTEXTMENU, и эти сообщения передаются родительским окнам ... – xMRi

+0

К сожалению, я не знаю, как стандартизировать подкласс дескриптора. Поскольку я не нашел - SubclassWindow (pParentFrm _-> m_hWndMDIClient) - это MFC subclassing, потому что это дает мне ошибку уже объекта подкласса. Так вы можете дать мне пример «standatd subclass a handle» – DmitryLazdin

Смежные вопросы