2016-04-04 5 views
0

Guten Tag! Ich aktualisiere meine Anwendung von CMDIFrameWnd zu CMDIFrameWndEx, und konfrontiert mit dem Problem der Client-Bereich von MainFrame.Bevor ich hatte m_hWndMDIClient, und Subclass dazu mit meiner Klasse. Jetzt habe ich m_wndClientArea, und es bringt mir nur Kopfschmerzen! Jetzt kann ich nicht Subclass. Deshalb habe ich versucht, dies zu tun:Kundenbereich CMDIFrameWndEx

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

Aber ich kann nicht einmal überprüfen, wie es funktioniert, weil ich jetzt ein Problem haben, dass ich CWnd meiner Client-Bereich auf einen anderen Funktionen geben sollte, aber m_wndClientArea ist geschützt . Meine Fragen sind also: Kann ich meine eigene Klasse auf eine andere Art untergliedern? Wenn ich nicht kann, wie sollte ich m_wndClientArea verwenden, um es anderen Funktionen zu geben?

Antwort

0

Was ist der Grund für diese Unterklasse?

Wenn es nur über das Zeichnen der Hintergrund ist, verwenden Sie die neue virtuelle Funktion: OnEraseMDIClientArea

Sonst ist es kein Problem, den Standard-Subklassen zu verwenden.

Da das HWND-Handle des mdi-Clientfensters bereits an ein MFC-CWnd-Klassenobjekt angefügt ist, können Sie die MFC-Unterklasse nicht erneut verwenden.

+0

Der Hauptgrund ist die Verwendung von OnRButtonUp (etc) -Funktionen im Client-Bereich! Ich las Ihre Antwort über "klassische Unterklassen" hier - http://StackOverflow.com/Questions/30209469/How-to-limit-the-Number-of-Mdi-Tab-Groups, aber ich verstehe nicht, was insbesondere sollte ich Unterklasse - CMDIClientAreaWnd oder CMDIFrameWndEx und wie? – DmitryLazdin

+0

Sie Unterklasse ein Handle kein Objekt! m_hWndMDIClient. Was ist der Grund für die Erkennung von RButtonUP/Down? Kontextmenüs sollten Implementierungen mit WM_CONTEXTMENU sein, und diese Nachrichten werden an die übergeordneten Fenster weitergegeben ... – xMRi

+0

Leider weiß ich nicht, wie man eine Handle-Subklasse behandelt. Wie ich finde - SubclassWindow (pParentFrm _-> m_hWndMDIClient) - ist MFC Subclassing, weil es mir Fehler von bereits Subclass-Objekt gibt. Also kannst du mir bitte ein Beispiel geben von "standatd subclass a handle" – DmitryLazdin