WINAPI - Frage zu Buttons
-
Hallo, ich habe eine Frage zu Buttons. Mann braucht dafür ja auch ein Handle. Was ist aber, wenn man z.b. 30 Buttons erstellen will?
Braucht man dann für jeden Button einen eigenen Handle?Ich habe mal einfach so ausprobiert, ob man mehrere Buttons
mit einem Handle erstellen kann. Das geht ja auch, jedoch kann man die einzelnen Buttons ja dann nicht
mehr wirklich ansprechen(zum Beispiel mit SetWindowText().)Weiss jemand eine Lösung? Wie kann man am besten eine größere Menge von Buttons erstellen?
Oder kann man Buttons auch über die Menü-ID ansprechen?
-
Nicht braucht... man hat für jeden Button ein Handle.
Aber man kann Child-Controls auch über Ihre IDs ansprechen, die man ihnen beim erzeigen mitgibt. Siehe GetDlgItem.Lies doch mal ein Tutorial...
-
Aber man kann Child-Controls auch über Ihre IDs ansprechen...
ID ermitteln:
id = GetWindowLong (ButtonHwnd, GWL_ID) //oder id = GetDlgCtrlID (ButtonHwnd) //oder CreateWindow ( ......,(HMENU)Zehler, ((LPCREATESTRUCT)lParam) -> hInstance, NULL))
-
danke, für eure Antworten, nur wie würde ich dann mit der ID zum Beispiel SetWindowText() benutzen? Dazu braucht man ja ein Handle!
-
Liest Du denn überhaupt was man Dir schreibt.
Ich habe GetDlgItem erwähnt...
Zusätzlich gibt es SetDlgItemText...Lies ein Tutorial.
-
Martin Richter schrieb:
Liest Du denn überhaupt was man Dir schreibt.
Ich habe GetDlgItem erwähnt...
Zusätzlich gibt es SetDlgItemText...Lies ein Tutorial.
Ja, ich lese eure Antworten. Das blöde ist nur, das in allen Tutorials, die ich gelesen und auch bei Youtube gefunden habe, nur das grundlegendste erklären. Auf sowas wie SetDlgItem wird nirgendwo eingegangen. Hab nicht gewusst, das es auch SetDlgItemText gibt. Hast du vielleicht ein Tipp, wie ich in der MSDN nach solchen Funktionen suchen kann? Ich meine, man kommt ja nicht einfach auf SetDlgItemText. Wie kann ich da bei meiner Suche vorgehen.
PS: Ich habe in letzter Zeit hin und wieder mal kein Internet, weswegen ich mir die Dokumentationen zu WIN32, C++ usw. auf die Festplatte geholt hab. Da kann man ja nicht so gut Suchen, wie bei Google. Wäre dir dankbar, wenn du mir noch in dieser Hinsicht weiterhelfen könntest. Ansonsten erstmal danke für deine Antworten! Achso, kannst du mir vielleicht ein Tutorial sagen, wo SetDlgItem auch vorkommt?
-
Stichwort: Dynamische Steuerelemente/Controls
-
Kann mir vielleicht jemand ein Beispiel erstellen, denn ich probiere rum, doch checke nicht, wie ich GetDlgItem + GetDlgItemText benutzen muss. Wäre wirklich super, wenn jemand ein Beispiel mit Kommentaren posten könnte. Und bitte keine Hinweise ala "Lies ein Tutorial". Es sei denn, ihr schreibt, welches Tutorial ihr meint und welches auch GetDlgItem erklärt.
-
sunn schrieb:
Es sei denn, ihr schreibt, [was][...] GetDlgItem erklärt.
In der MSDN steht wirklich alles drin was man braucht.
1. Hinweis, falls Missverständisse mit dem Namen der Funktion auftretenMSDN schrieb:
You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes
2. Hinweis
MSDN schrieb:
[hDlg:] A handle to the dialog box that contains the control.
Dank dem Zitat von Oben wissen wir auch nun, dass wir nicht nur Dialogfenster sondern irgendein parent window nehmen dürfen. Das parent window musst du dir in einer Variable selbstverständlich merken.
3.HinweisMSDN schrieb:
[nIDDlgItem:] The identifier of the control to be retrieved.
Wie Alexy geschrieben hat gibt man in hMenu von CreateWindow die ID des Items an. Die muss man jetzt nur noch wissen und schon ist man fertig.
HWND parent = CreateWindow(...);//das Hauptfenster deiner Anwendung, bzw. das Fenster welches deine child windows enthält HWND meinButton = GetDlgItem(parent,1);
-
Danke dir floorball, für deine Mühe. Anscheinend hab ich es doch richtig verstanden.
Wäre wirklich super, wenn du mir noch eine kleine Frage beantworten könntest. Also, ich habe folgendes erstellt:Hauptfenster(HWND hWnd),
Child-Fenster(Buttons -> HWND hChild)Jetzt hab ich es aber so gemacht, das ich 10 Buttons mit dem gleichen
Handle(hChild)erstellt hab. Die ID ist bei jedem natürlich anders.
Dann muss ich doch teoretisch so darauf zugreifen, oder:HWND meinButton = GetDlgItem(hChild,1);
Bin nur leicht verwirrt, da hChild ein ChildWindow von hWnd ist.
Wäre super, wenn du mir sagen könntest, ob ich richtig liege.
-
sunn schrieb:
HWND meinButton = GetDlgItem(hChild,1);
Bin nur leicht verwirrt, da hChild ein ChildWindow von hWnd ist.
Wäre super, wenn du mir sagen könntest, ob ich richtig liege.As long as the hDlg parameter specifies a parent window and the child window has a unique identifier...
Wie man der MSDN-Hilfe entnehmen kann, wird der Handle des Elternfensters erwartet ...
-
Hab es selbst herausgefunden. Funktioniert jetzt einwandfrei.
Nochmals vielen vielen Dank an alle, die mir geholfen haben, auf die richtige
"Spur zu kommen"!!!
-
Sorry merano, hab deinen Beitrag erst jetzt gesehen, da er auf der 2 Seite ist.
Ja, das ist aus der MSDN zu entnehmen. Hatte einen Denkfehler, aber jetzt ist alles klar.Danke auch dir, dass du mich nochmal korrigiert hast.