Dialog-Resource in TabControl
-
Ziemlich nettes Ding.
Ich muss sagen, ich kannte Spy++ bisher noch nicht.WM_LBUTTONDOWN hab ich mir jetzt mal anzeigen lassen und verschiedene Windows ausprobiert:
Class: Afx: ControlBar bekommt die Message. (sollte das angedockte Window sein)
Class: Afx: TabWnd bekommt die Message.
Class: #32770(Dialog) bekommt die Message nicht.Ob man direkt eine Liste aller Klassen ausspucken lassen kann, welche die Message bekommen, habe ich noch nicht herausgefunden. Ich hoffe das waren die richtigen Infos.
Was vielleicht noch helfen könnte, wären folgende Teile:
Im Create von MyPane
// Fenster erstellen CString caption; caption.LoadString(IDS_DETAILS_TITLE); if(!CDockablePane::Create(caption, pParentWnd, rect, TRUE, ID_DETAILS, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_FLOAT_MULTI , AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE)) { ASSERT(0); return FALSE; }Im OnCreate von MyPane
// Tab-Control erstellen CRect rectDummy; rectDummy.SetRectEmpty(); if(!m_wndTabCtrl.Create(CMFCTabCtrl::STYLE_3D,rectDummy,this,ID_DETAIL_CONTROL)) { ASSERT(0); return -1; } m_wndTabCtrl.SetLocation (CMFCTabCtrl::LOCATION_TOP);Schonmal Danke für den Tipp mit Spy++ Martin!

Btw, kleine korrektur von dem Post gestern Abend:
m_wndTabCtrl ist vom typ CMFCTabCtrl und nicht CTabCtrl.edit: Lange Zeile gebrochen
-
Wie siehts denn eigentlich allgemein aus?
Ist es Blödsinn ein CDialog in ein TabControl zu stecken, oder müsste das an sich eigentlich funktionieren?
Ich hab irgendwie nirgens sowas ähnliches gefunden.Falls irgendwelche Infos noch nützlich wären, nur raus damit.

-
Gibt es dafür schon eine Lösung oder nicht? Mich würd das auch interessieren da ich einen ähnlichen Fall derzeit hab...
Lg
m0w
-
Leider gar nicht. Ich bin in diesem Fall immer noch gleich weit.

Heisst das du probierst auch eine Resource in ein Control zu stecken?
Ich hab immernoch keine Ahnung, ob das so gedacht ist, oder ob man das "normalerweise" auf ne ganz andere Weise handhabt.Vielleicht kann man irgendwie die Messages vom DockingPane direkt zum Dialog umleiten.
Ich hoffe hier kommen noch ein paar Meinungen dazu.

-
Mich hat es beim Umstellen auf das Feature Pack auch ganz schön gefuchst (ehrlich gesagt ich bin immer noch nicht überall ganz durchgestiegen).
Ich hatte auch mit den DockablePanes Probleme. Im Endeffekt habe ich in meinem DockablePane ein CDialogBar created, welches die Ressource lädt.Command-Routing funktioniert, du musst nur im OnSize des DockablePanes die WindowPos des DialogBars anpassen.
-
Kontrolliere mal nur die Behandlung von WM_NCHITTEST. Evtl. ist hier was faul.
-
@dwo77
Hmm.. wenn ich DialogBars statt Dialoge benutze, wird dieser im Gegensatz zum Dialog leider nicht mehr angezeigt.
Mit PropertyPages wär ich gleich weit wie mit Dialogen. Angezeigt aber keine Maus-Events.
Im OnSize von MyPane setze ich momentan nur die Position des TabCtrl neu.
SetWindowPos auf den Dialog klappt ja nicht.@Martin
Im MyDialog:BEGIN_MESSAGE_MAP(MyDialog, CDialog) ON_WM_LBUTTONDOWN() ON_WM_NCHITTEST() ON_BN_CLICKED(...) ON_EN_UPDATE(...) END_MESSAGE_MAP() ... LRESULT MyDialog::OnNcHitTest(CPoint point) { TRACE(_T("HitTest!\n")); return CDialog::OnNcHitTest(point); }Was mir sonst noch als u.U. hilfreich einfallen würde wär, dass der Dialog als Member im MyPane gesetzt ist und dessen Create initialisiert wird.
Zum TabControl wird es erst später hinzugefügt.
Leider ohne Erfolg. Die Message kommt nicht an.
-
Vor AddTab:
::SetParent(m_pMyDialog->m_hWnd, m_wndTabCtrl.m_hWnd);Es scheint, dass dies mein Problem gelöst hat. oO
Sogar resize funktioniert scheinbar perfekt.Ich bin zwar noch etwas skeptisch, weil ich nicht weiss, ob das wirklich so gedacht ist, dass man da jetzt quasi mit dem Holzhammer das Message-Routing fixt,.. aber solange es funktioniert. ^^"
Vielen Dank für eure Hilfe!
-
Hättest Du evtl. das Control gleich als Child des Tab-Controls anlegen sollen?
Was passiert dann?
-
Genau das gleiche.
Ist aber schöner, du hast recht.
Im Nachhinein wirkt das alles furchtbar logisch.m_pMyDialog->Create(IDD_MYDIALOG,&m_wndTabCtrl);
-
Euronymuz schrieb:
Ist aber schöner, du hast recht.

Im Nachhinein wirkt das alles furchtbar logisch.Jo. Vermutlich lag es einfach an überlappenden (unsichtbaren) Fenstern.
Wäre interessant dies noch mal im Spy++ in der nicht funktionierdnen Weise anzusehen.
Dann hättest Du evtl. gesehen, dass sich hier evtl. zwei Siblings überlagern.