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.
Können Sie bitte veröffentlichen Sie Ihren code?
InformationsquelleAutor stelonix | 2011-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Steuerelement in einem Fenster oder Dialogfeld ausgeblendet werden kann, mit
In einem dialog können Sie ermittelt werden die Steuerelemente für Fenster-handle durch aufrufen
In der Regel Sie etwas schreiben wie:
Wäre es hilfreich, wenn Sie weitere Informationen darüber geben und einige code: Wie hast du die kontrolliert? Welche Sprache, kompilieren und Rahmen habt Ihr benutzt?
_hWnd ist die Kontrolle HWND. Den Eltern ist auch in der Klasse als _parent. Auch ich war zunächst versucht, mit SW_SHOW und es hat nicht funktioniert, also wechselte ich zu SW_SHOWNOACTIVATE.
Soweit ich sagen kann, die Anrufe, die Sie machen, korrekt sind, indem Sie sich - Sie sind in allen windows-Anwendungen. Also muss es ein problem irgendwo anders. Sie bekam zu Debuggen.
Wenn ich die Größe des Hauptfensters, wird die Schaltfläche ausgeblendet. Hilft das?
Nur um hinzufügen: ich habe gerade die Schaltfläche übergeordnetes Hauptfenster, und jetzt SW_HIDE funktioniert, also das scheint ein Problem zu sein mit GroupBoxes.
InformationsquelleAutor RED SOFT ADAIR
Ich denke, dass der Aufruf der Funktion, die Sie wollen, ist EnableWindow ich habe diese, bevor Sie zum deaktivieren einer Schaltfläche auf einem Formular. Sie brauchen, um ein handle für das Fenster (Objekt) ersten, obwohl, so dass Sie möglicherweise verwenden möchten EnumChildWindows zum Durchlaufen aller Steuerelemente zu finden, die Sie wollen.
InformationsquelleAutor Matt Wilko