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.
Thomas S. schrieb: > Wir sind hier bei ganz normalen C. ShowWindow(GetDlgItem(ID),SW_SHOWNA); bzw. SW_HIDE.
Danke Dir, bringt aber Fehler. Füge mal einen Schnipsel meines Codes hier rein, der soweit funktioniert.
1 | SetDlgItemInt(hDlg, IDC_WaitTime_7, Speicher_Inhalt [7][6], TRUE); // Pausenzeit reinschreiben |
2 | SetDlgItemInt(hDlg, IDC_Loops_7, Speicher_Inhalt [7][7], TRUE); // Loops, Waits, noch klären |
3 | |
4 | //SetDlgItemInt(hDlg, IDC_Running_4.Visible = FALSE);
|
5 | |
6 | ShowWindow(GetDlgItem(IDC_Running_4),SW_HIDE); |
'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
GetDlgItem braucht ein Handle auf den Dialog als erstes Argument, die ID ist das zweite Argument. https://learn.microsoft.com/de-de/windows/win32/api/winuser/nf-winuser-getdlgitem
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.
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.
Danke für die Erläuterung von Deiner Seite. Hmmm schrieb: > es gibt bloss ein > paar "Abkürzungen" für besonders häufig benutzte Dinge Als die wären? Ich bin kein C-Guru. Kann mit C für meine Bedürfnisse umgehen, aber Tricks sind mir halt noch nicht geläufig.
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.
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
:
Bearbeitet durch User
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.
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
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...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.