Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

1

21.02.2013, 18:53

WinAPI | Handles und Instanzen lokal definieren

Hi,

Ich habe gerade eine Windows Applikation geschrieben die mit Hilfe der Mitternachts(oder abc)Formel die Nullstellen einer quadratischen FUnktion errechnen kann. Nun frage ich mich wie ich die ganzen Handles und Istanzen lokal definieren kann, denn wenn ich sie in der WinMain Funktion definiere und versuche der Callbackfunktion als Parameter zu übergeben bekomme ich einen Fehler.
Nun meine Frage: Wie kann ich die Handles und Instanzen lokal definieren und dennoch in der WinMain Funktion verwenden?

Vielen Dank für eure Hilfe und Antworten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

21.02.2013, 19:01

Was genau meinst du mit "lokal definieren"?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

3

21.02.2013, 19:16

Gar nicht. Du kannst einer Callbackfunktion der WinAPI keine zusätzlichen Parameter übergeben. Was du machen könntest, wäre eine Fensterklasse zu schreiben, um benötigte Daten und Handles zu kapseln.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

21.02.2013, 19:29

Rein prinzipiell: Wenn es um das Ansprechen von Controls in einem Fenster geht, dann musst du dir die Handles gar nicht unbedingt merken; wirf mal einen Blick auf GetDlgItem(). Weitere Möglichkeiten: Globale Variablen (einfach, aber nicht unbedingt zu empfehlen), per GetWindowLongPtr() und GWLP_USERDATA bzw. in den "exta bytes", die du für jedes Fenster anfordern kannst, deine Daten ablegen.

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

5

23.02.2013, 18:12

Das heist also ich kann einfach diese funktion (getdigitem) anstatt des handles beim erstellen des fensters angeben oder verstehe ich das vollkommen falsch?:)

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

6

23.02.2013, 18:19

Nein, mit dieser Funktion bekommst du das Handle eines Controls mittels dessen ID (die du bei den (Dialog-)Ressourcen festlegen kannst).

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

23.02.2013, 19:50

Zitat von »MSDN«

You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes. As long as the hDlg parameter specifies a parent window and the child window has a unique identifier (as specified by the hMenu parameter in the CreateWindow or CreateWindowEx function that created the child window), GetDlgItem returns a valid handle to the child window.

;)

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

8

24.02.2013, 16:01

Könnte jemand kurz ein Anwendungsbeispiel posten oder mir erklären wie ich diese Funktion praktisch anwende?

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

9

24.02.2013, 17:18

Zu dem Vorschlag mit der FEnsterklasse: Die Instanz dieser Klasse müsste ich dann aber auch Global erzeugen sonst ist sie in der Callbackfunktion auch nicht bekannt oder?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

24.02.2013, 17:55

Wie eben in der MSDN steht: Mit GetDlgItem() kannst du das Handle jedes Child Window finden, das einer bestimmten Child Window ID entspricht. Die ID legst du fest, indem du sie beim Erzeugen des Child Window mit CreateWindowEx() im hMenu Parameter übergibst. Übergib also beim CreateWindowEx() jedes deiner Steuerelemente die jeweilige ID, die du für das Child Window verwenden willst und verwend in der WndProc des Hauptfensters dann GetDlgItem() um das Handle zur jeweiligen ID abzufragen...

Werbeanzeige