CPropertySheet: Lässt im Hauptdialog keine anderen Nutzungen mehr zu :(
-
Hallo.
Ich hab in einem single-window-app folgendes Problem:
Dort habe ich neben anderen Elementen (Buttons, etc.) noch ein PropertySheet eingefügt. Dieses habe ich folgendermaßen in die OnCreate()-Methode meines Hauptdialoges eingebunden:
if(!m_pPropSheet->Create(this,WS_CHILD | WS_VISIBLE)) { // Fehlerroutine entwickeln, da der Propsheet nicht erzeugt werden konnte } m_pPropSheet->SetDlgCtrlID(12345); CRect rect; this->GetClientRect(rect); m_pPropSheet->MoveWindow(rect);Das funktioniert auch soweit fehlerfrei.
Die Pages sind anwählbar und lassen sich bedienen.
Nun verhält sich der Sheet aber wie ein DoModal()-Aufruf und in meinem Hauptdialog ist nichts anderes mehr anwählbar. Ich sehe alles und ein Klick z.B. bringt nichts, der Button daneben reagiert gar nicht.Hab ich da noch irgendwo ein Flag vergessen oder wir kann ich dafür sorgen, dass der Sheet nicht so vereinamend ist?
Danke

-
Das CPropertySheet sollte noch WS_TABSTOP und WS_EX_CONTROLPARENT bekommen. Schau mal hier: http://www.codeguru.com/cpp/controls/propertysheet/article.php/c583/
-
Vielen Dank.
Damit konnte ich jedenfalls mal ein Nebenproblem lösen.

Es war nämlich auch nicht möglich einen modalen Dialog aus dem Sheet heraus zu öffnen. Das klappt jetzt prima.Aber, ..., es ist immer noch nicht möglich Elemente auf dem Hauptdialog anzuwählen.
So nach dem Motto:
Ich bin das Sheet, dein Sheet, du sollst nichts anderes neben mir haben.

Da notwendige Flag hab ich leider noch nicht gefunden.

Ups, ich vergaß, hier der aktuelle Code-Stand:
int CTgmTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (__super::OnCreate(lpCreateStruct) == -1) return -1; if(!m_pPropSheet->Create(this,WS_CHILD | WS_VISIBLE)) { // Fehlerroutine entwickeln, da der PropSheet nicht erzeugt werden konnte } m_pPropSheet->SetDlgCtrlID(12345); m_pPropSheet->ModifyStyleEx (0, WS_EX_CONTROLPARENT); m_pPropSheet->ModifyStyle( 0, WS_TABSTOP ); CRect rect; this->GetClientRect(rect); m_pPropSheet->MoveWindow(rect); return 0; }
-
Bei der Fehlersuche bin ich auf folgendes gestoßen:
Es ist möglich Elemente neben dem Sheet zu nutzen, wenn ich sie mit TAB ansteuere und dann auf Enter drücke. Nur auf Mouseklicks wird nicht reagiert ausserhalb des Sheets.
Fällt da jemandem was zu ein?
-
Probier doch mal CTgmTestDlg ein WS_EX_CONTROLPARENT zu verpassen.
-
Könnte es sein, dass sich die Controls überlappen? Dann würde mich das in keiner Weise wundern...
-
Martin Richter schrieb:
Könnte es sein, dass sich die Controls überlappen? Dann würde mich das in keiner Weise wundern...
Treffer, versenkt.
Genau das war es.Mein Fehler war, dass ich das Sheet grundsätzlich auf die Größe des Hauptdialoges gezogen hatte:
CRect rect; this->GetClientRect(rect); m_pPropSheet->MoveWindow(rect);Es wurde zwar nicht nicht so gezeichnet, aber dennoch hat sein Einflussbereich alles überdeckt.
Das Auskommentieren von MoveWindow() hat mir dann die Lösung vor Augen geführt.Sowas, und wegen solch einem dummen Fehler würg ich mir hier wieder ewig einen ab.

Danke trotzdem für alle, die geholfen haben.
