Gruppenfeld
-
Hallo zusammen.
Habe ein kleines prob. mit einem Gruppenfeld. Ich habe ein Gruppenfeld mit
ein paar Optionsfeldern drin. Habe im Gruppenfeld "Gruppe" angeklickt und habe dem Gruppenfeld eine Steuervariable CButton zugeordnet. Jetzt möchte ich das komplette
Gruppenfeld inclusive Optionsfelder bei bedarf mit ShowWindow sichtbar oder unsichtbar machen. wie kann ich das in einen aufwand machen? oder muss ich für jedes Optionsfeld einzeln ShowWindow aufrufen also auch genausoviele CButton erzeuge? Wobei das meine ich nicht geht da ich ja pro Gruppe nur eine Variable zuordnen kann.
-
Weiß das wirklich niemand????
mfg Tom
-
Ein Trippel Hinweise (vgl. ein Paar (=2) Hinweise) °~>
1.
Es gibt die FunktionGetDialogItem,
mit der man die einzelnen Steuerelemente
anhand der ID ansprechen kann, ohne
Variablen zu erstellen:/* Optional: this-> */ GetDialogItem( IDC_BUTTON1 );2.
Wenn du das Gruppenfeld unsichtbar machst,
verschwinden nicht die Optionsfelder, die
angeblich auf ihm plaziert sind.
Denn alle sinjd sozusagen auf gleicher
Ebene.
Um dies zu verändern, muss man viele Ein-
Stellungen ändern, und das bei jedem
Optionsefeld einzeln:
Schritt 1:// Man muss alle Steuerelemte dem Gruppenfeld // unterorndnen: /* Optional: this-> */ GetDlgItem(/* Optionsfeld-ID */)-> SetParent( GetDlgItem(/* Gruppenfeld-ID */)); ...Schritt 2:
// Man muss alle Steuerelemte verschieben, da // der Koorinatenursprung (wo x=0 und y=0 ist) // Dialogfeldes ungleich dem des Gruppenfeldes // ist (meißt oben links in der Ecke). CRect rGrp, // Größe des Gruppenfeldes rOpt; // Größe des Optionsefeldes /* Optional: this-> */ GetDlgItem(/* Gruppenfeld-ID */)-> GetWindowRect( rGrp ); GetDlgItem(/* Optionsfeld-ID */)-> GetWindowRect( rOpt ); GetDlgItem(/* Optionsfeld-ID */)-> SetWindowRect( rOpt - rGrp ); // <- Hier bin ich mir nicht so sicher ...Schritt 3:
// Man muss jedes Steuerelement informieren, dass // sich was getan hat. GetDlgItem(/* Gruppenfeld-ID */)-> UpdateWindow(); GetDlgItem(/* Optionsfeld-ID */)-> UpdateWindow(); ...3.
Ich würde alle ID in einem Array speichern
und dann jedes Optionsfeld einzelnd
mithilfe einer For-Schleife abklappern
"abklappern".Ich Entschuldige mich schon einmal vorweg
für die Die Rechtschreib-, Syntax- und oder oder logische Fehler.
-
Oder etwas in der Art:
void EnableWindowGroup(HWND hwnd, int enable) { // Find first window of group while (hwnd && !(::GetWindowLong(hwnd,GWL_STYLE) & WS_GROUP)) hwnd = ::GetWindow(hwnd, GW_HWNDPREV); if (!hwnd) { ASSERT(FALSE); return; } // Perform operation for all windows of this group do { if (!enable) { ::EnableWindow(hwnd, FALSE); ::ShowWindow(hwnd, SW_SHOW); } else if (enable > 0) { ::EnableWindow(hwnd, TRUE); ::ShowWindow(hwnd, SW_SHOW); } else { ::ShowWindow(hwnd, SW_HIDE); ::EnableWindow(hwnd, FALSE); } // Cannot use GetNextDlgGroupItem() here, // because hidden windows are skipped by Windows. hwnd = ::GetWindow(hwnd,GW_HWNDNEXT); } while (hwnd && !(::GetWindowLong(hwnd,GWL_STYLE) & WS_GROUP)); }und an das HWND eines CWnd kommst Du ja über dessen Membervariable m_hWnd
P.S: Sorry, die Formatierung ist leider etwas aus dem Tritt geraten, da ich hier ne Tabsize von 4 eingestellt habe.
P.P.S: Sowas sollte man eigentlich in die FAQ packen!