C - Visible-Eigenschaft von einem Dialog-Item einstellen

OP (Firma: Chipwerkstatt) #7920105
Lesenswert?

Hallo Forengemeinde,

habe u.A ein/mehrere Dialog's in meinem C-Projekt erstellt. Auch sind da Bitmaps (kleine grüne/rote Punkte) die ich als BMP erstellt habe, und in den Dialog plaziert habe.

Nun möchte ich diese Bitmaps mit der Visible-Eigenschaft sichtbar/unsichtbar machen. Und dies vom C-Code aus.

bitte, mit welchen Befehlen wird dies erreicht? Wir sind hier bei ganz normalen C.

Habe schon ausgedehnt im Netz gesucht, unter C-HowTo, StackOverflow, ect. . Bin aber nicht fündig geworden. Meine C-Bücher (Api-Bible) sind bislang verschollen.

OP (Firma: Chipwerkstatt) #7920116
Lesenswert?

Danke Dir, bringt aber Fehler.

Füge mal einen Schnipsel meines Codes hier rein, der soweit funktioniert.

[C] SetDlgItemInt(hDlg, IDC_WaitTime_7, Speicher_Inhalt [7][6], TRUE); // Pausenzeit reinschreiben SetDlgItemInt(hDlg, IDC_Loops_7, Speicher_Inhalt [7][7], TRUE); // Loops, Waits, noch klären

//SetDlgItemInt(hDlg, IDC_Running_4.Visible = FALSE);

ShowWindow(GetDlgItem(IDC_Running_4),SW_HIDE); [/C]

'IDC_Running_4' ist das bmp im Dialog.

Dies bringt Fehler: ...r.c(1535) : warning C4022: 'GetDlgItem' : pointer mismatch for actual parameter 1 ...r.c(1535) : error C2198: 'GetDlgItem' : too few actual parameters

OP (Firma: Chipwerkstatt) #7920353
Lesenswert?

Udo K. schrieb:

GetDlgItem braucht ein Handle auf den Dialog als erstes Argument,

Hallo und danke an die Mitwirkende.

Das war es. Das Handle fehlte. Hätte mir auch auffallen sollen/können. Aber danke. Ich dachte vorher, wenn einzelne Editfelder, ect. mit SetDlgItemInt(hDlg,.... angesprochen werden, dann sollte es auch für dieses Bitmap, das mir nur einen farbigen Punkt darstellt, gelten.

#7920362
Lesenswert?

Thomas S. schrieb:

Ich dachte vorher, wenn einzelne Editfelder, ect. mit SetDlgItemInt(hDlg,.... angesprochen werden, dann sollte es auch für dieses Bitmap, das mir nur einen farbigen Punkt darstellt, gelten.

Generell wird erstmal alles über Handles angesprochen, es gibt bloss ein paar "Abkürzungen" für besonders häufig benutzte Dinge wie das Befüllen oder Auslesen von Werten.

Unter der Haube schickt SetDlgItemInt() ein WM_SETTEXT an das Window-Handle, das per GetDlgItem() ermittelt wird. Vorher macht es aus dem übergebenen Integer auch noch einen String.

#7920402
Lesenswert?

Thomas S. schrieb:

Als die wären?

Neben SetDlgItemInt() gibt es im gleichen Stil noch SetDlgItemText() und Get* für den Rückweg.

Was weitere Vereinfachungen angeht, einfach mal die Doku durchlesen, da steht immer dabei, was die einzelnen Funktionen und Macros tun. Meistens läuft es auf das Senden von Window Messages an die jeweiligen Controls hinaus.

Thomas S. schrieb:

Ich bin kein C-Guru.

Das ist allerdings nicht wirklich ein C-Thema, sondern betrifft nur die Win32-API.

Ob man sich die als Quasi-Anfänger heute noch antun will, steht auf einem anderen Blatt.

#7920436
Lesenswert?

Hmmm schrieb:

Ob man sich die als Quasi-Anfänger heute noch antun will, steht auf einem anderen Blatt.

Ich würds ja auch vermeiden (einfach, weil ich's /kenne/), aber wenn es nötig ist, kann ich folgenden Literaturhinweis geben:

Charles Petzold, "Programming Windows", vierte oder fünfte Ausgabe.

Wird man nur noch antiquarisch bekommen, die sind von 1996 bzw. 1998. Neuere Bücher mit ähnlichem Titel sind ungeeignet.

Ältere Ausgaben sind auch ungeeignet, da die noch 16-Bit-Windows beschreiben (die erschienen 1988, 1990 und 1992).

Das hier ist die 5. Ausgabe: (drei Sekunden Google-Suche, erster(!) Treffer)

https://www.cl72.org/100winProg/Charles%20Petzold%20-%20Programming%20Windows%20-%205th%20Ed.pdf

OP (Firma: Chipwerkstatt) #7920442
Lesenswert?

Hmmm schrieb:

Ob man sich die als Quasi-Anfänger heute noch antun will, steht auf einem anderen Blatt.

Was ist dann als Nachfolger C zu verstehen? - C++, C#?

Objektorientiert ist für mich irgendwie ne Hürde. Hatte ich schon mehrfach versucht zu starten, aber Klassen, Container Vererbung, blabla sind irgendwie abstakt. Hab Bücher schon ewig da, mal sehen.

#7920447
Lesenswert?

Harald K. schrieb:

Charles Petzold, "Programming Windows", vierte oder fünfte Ausgabe.

Der Empfehlung schliesse ich mich an, steht hier auch seit zig Jahren im Regal.

Thomas S. schrieb:

Was ist dann als Nachfolger C zu verstehen?

Nochmal: Es geht hier NICHT um die Programmiersprache, sondern um die Win32-API, die keineswegs der einzige Weg ist, Windows-GUI-Anwendungen zu erstellen.

Plattformübergreifend gibt es z.B. GTK (C) oder Qt (C++). Such Dir was aus:

https://en.wikipedia.org/wiki/List_of_widget_toolkits

(Firma: 1984now) #7920468
Lesenswert?

Thomas S. schrieb:

Was ist dann als Nachfolger C zu verstehen? - C++, C#?

Objektorientiert ist für mich irgendwie ne Hürde.

Ja, das Konzept ist nicht leicht zu knacken, wenn man von rein prozeduraler Programmierung kommt. Hat bei mir auch etwas gedauert, bis es Klick gemacht hat. Ist aber zum Glück Jahrzehnte her, dass ich diese Hürde genommen habe.

Hatte ich schon mehrfach versucht zu starten, aber Klassen, Container Vererbung, blabla sind irgendwie abstakt.

Nunja, benutzen tust du es zwangsläufig trotzdem, selbst wenn du nur via WinAPI in C programmierst. Was da letztlich angesprochen wird, sind auch wieder praktisch durchgängig Objekte.

Es ist aber ein wesentlicher Unterschied, ob man bestehende Objekte verwendet oder selbst objektorentiert programmiert. Für ersteres braucht man die OO-Konzepte oft nicht wirklich zu verstehen, insbesondere dann nicht, wenn die Objekte wiederum über ein C-API präsentiert werden. Nützlich ist es allerdings oft trotzdem. Schon um zu verstehen, warum das C-API so aussieht, wie es halt aussieht.

Dein Fehler wäre dir z.B. nicht unterlaufen, wenn du das Konzept kennen würdest. Da wäre dir sofort aufgefallen, dass da wohl noch was fehlen muss.

Allerdings: kurze Lektüre der API-Referenz hätte das Problem genauso geklärt. Ist ja nicht so, das MS die unter Verschluß hält. Nö, man kann die für lau im Internet nachlesen. Jederzeit...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren