2016-04-04 23 views
0

İyi günler! Uygulamamı CMDIFrameWnd'den CMDIFrameWndEx'e güncelliyorum ve MainFrame'in istemci alanı sorunuyla karşılaştım.Benim m_hWndMDIClient ve sınıfımla birlikte Subclass'ım vardı. Şimdi m_wndClientArea var ve bana sadece baş ağrıyor! Şimdi Alt Sınıfı alamıyorum.İstemci Alanı CMDIFrameWndEx

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

Ama ben bile bu işe nasıl kontrol edemez şimdi bir sorun var çünkü başka fonksiyonlara müvekkilim alanının CWnd vermek gerektiğini, fakat m_wndClientArea korunmaktadır: Bunu yapmaya çalıştım yüzden . Sorularım: Kendi sınıfımı başka bir şekilde sınıflandırabilir miyim? Yapamazsam, başka bir işleve vermek için m_wndClientArea'yı nasıl kullanmalıyım?

cevap

0

Bu alt sınıflamanın nedeni nedir? OnEraseMDIClientArea

Aksi takdirde standart subclassing kullanmak için hiçbir sorun: sadece arka planı çizim konusunda ise

, yeni sanal işlevini kullanın.

Mdi istemci penceresinin HWND tanıtıcısı bir MFC CWnd sınıf nesnesine zaten eklendiğinden, MFC alt sınıfını tekrar kullanamazsınız.

+0

Ana neden, istemci alanında OnRButtonUp (etc) işlevlerini kullanmaktır! "Klasik alt sınıflama" hakkındaki cevabınızı buradan okudum - http://stackoverflow.com/questions/30209469/how-to-limit-the-number-of-mdi-tab-groups, ama anlamıyorum özellikle alt sınıf - CMDIClientAreaWnd veya CMDIFrameWndEx ve nasıl olmalıdır? – DmitryLazdin

+0

Nesne olmayan bir nesne alt sınıfını! m_hWndMDIClient. RButtonUP/Down'un tespit edilmesinin nedeni nedir? Bağlam menüleri WM_CONTEXTMENU ile uygulanmalıdır ve bu mesajlar ana pencerelere aktarılır ... – xMRi

+0

Ne yazık ki, bir alt sınıfın nasıl ele alınacağını bilmiyorum .. - Altkümün Penceresi (pParentFrm _-> m_hWndMDIClient) - MFC alt sınıflama, çünkü zaten alt sınıf nesnesinin hatası veriyor. Bu yüzden bana "standatd alt sınıf bir tutamaç" örneğini verebilir misin? – DmitryLazdin