Ausblenden eines Steuerelements in Windows

Ich kann nicht herausfinden, wie zu verbergen, ein Kind-Fenster (eine Kontrolle), genauer gesagt eine GroupBox und eine Drucktaste. Ich dachte ShowWindow() mit SW_HIDE als zweiten parameter würde den job tun, aber es funktioniert einfach nicht. Noch SW_SHOW funktioniert Prima. Ich habe das richtige Fenster-handle für Steuerelemente, so dass ist nicht das Problem.

Habe ich gegoogelt und alles was ich finden konnte war die Menschen zu Fragen, wie sich zu verstecken Dialoge, nicht kontrolliert. Entweder das, oder die MFC-basierten Anwendungen, die nicht für hier.
Ich bin mit der reinen Windows-API, , die keine MFC -.

Was mache ich immer falsch?

BEARBEITEN: Mehr info: ich Schreibe einige einfache Klassen-Wrapper für die WinApi-Steuerelemente. Die WindowsControl-Klasse hat, neben anderen Methoden die folgenden Methoden für das ein-und ausblenden der Steuerung:

void Show() {
    ShowWindow(this->_hWnd,SW_SHOWNOACTIVATE);
}

void Hide() {
    ShowWindow(this->_hWnd,SW_HIDE);
}

Jedes Steuerelement erbt von WindowsControl.

Diesem Bild ist das Fenster-layout, so dass Sie verstehen, genau das, was ich Tue: http://i.stack.imgur.com/PHQnH.png

Wenn der Benutzer klickt in der "Chipsatz" Static control, es wird das laden der Informationen für einen bestimmten Kachel (gespeichert in einem array, aber das ist irrelevant). Je nach der Einstellung, es werde verbergen die "Bearbeiten bitwall" - Taste auf der linken Seite und zeigen Sie das leere GroupBox dahinter oder Umgekehrt.
Nur klar zu sein, das ist nicht etwas falsch mit meinem windows-api-Wrapper, ich bin immer die richtige HWND. Obwohl ShowWindow möglicherweise nicht in der Lage zu sein, rief aus einem Fenster Verfahren, das nicht die Eltern (das wäre seltsam).

EDIT2: Mit C++ mit Visual Studio 2008, keine MFC, kein WTL, kein CLR, Nein .NET

EDIT3: ich poste noch mehr code, so ist es einfacher

Innerhalb der statischen Fenster Verfahren, ich Griff WN_LBUTTONDOWN wie diese:

case WM_LBUTTONDOWN: {
  ...
  update_tiledata(c, l)


void update_tiledata(GroupBox * c, ListView* l ) {
    ...

   if (chp_copy.Tiles[selectedTile].Pass() == PT_BITWALL) {
          c->Controls(CTL_BTNEDITBIT)->Show();
          c->Controls(CTL_FRPHOLD)->Hide();
   } else {

          c->Controls(CTL_FRPHOLD)->Show();
          c->Controls(CTL_BTNEDITBIT)->Hide();
   }
   update_edits();
}

Den weggelassen code tut nichts, um Einfluss auf die Klassen, wie ich schon sagte, ShowWindow mit SW_HIDE WIRD immer aufgerufen, mit den richtigen HWND, aber nichts ist passiert.

Darf ich Fragen, was Sie versuchen zu erreichen, wie es vielleicht die bessere Lösung!
Können Sie bitte veröffentlichen Sie Ihren code?

InformationsquelleAutor stelonix | 2011-06-08

Schreibe einen Kommentar