Du bist nicht angemeldet.

Werbeanzeige

1

18.06.2018, 00:47

10.4 Globale Variablen "entfernen" (Windowsprogrammierung)

Hallo,

im letzten Code des 10. Kapitels werden ja globale Variablen verwendet und empfohlen, den Code so umzuschreiben, dass diese nicht mehr benoetigt werden. An sich ja alles kein Problem, waere da nicht die CALLBACK-Funktion, die immer rumzickt, wenn ich versuche, die Handles an sie zu uebergeben. Wie kann ich das Ganze loesen? ?(

BlueCobold

Community-Fossil

Beiträge: 10 811

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

18.06.2018, 06:42

Definiere "zickt rum".
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

18.06.2018, 14:52

(88 ): error C2440: "=": "LRESULT (__stdcall *)(HWND,UINT,WPARAM,LPARAM,HWND,HWND)" kann nicht in "WNDPROC" konvertiert werden
(88 ): note: Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

In Zeile 88 wird der Callback-Funktion der Funktionszeiger zugewiesen (windowclass.lpfnWndProc = WindowProc; )

dot

Supermoderator

Beiträge: 9 843

Wohnort: Graz

  • Private Nachricht senden

4

18.06.2018, 15:01

Sieht so aus, als ob du deiner WndProc einfach zwei zusätzliche Parameter angehängt hast!? Das kann natürlich nicht funktionieren. Die WndProc wird ja vom Betriebssystem aufgerufen. Wie genau stellst du dir denn vor, dass das OS auf einmal erratet, dass es hier zwei zusätzliche Parameter vom Typ HWND übergeben soll und welchen Wert diese haben sollen!?

5

18.06.2018, 17:44

Deswegen habe ich mich ja auch gewundert, wie ich die Handles an die Funktion uebergeben soll. Wie wäre es denn richtig?

dot

Supermoderator

Beiträge: 9 843

Wohnort: Graz

  • Private Nachricht senden

6

18.06.2018, 18:14

Hängt davon ab. Ich nehme an, du willst effektiv zusätzliche Werte an dein Window anhängen? In dem Fall wäre die "korrekte" Lösung, über den cbWndExtra Member der WNDCLASS/WNDCLASSEX Struktur beim Erzeugen des Fensters zusätzlichen Speicher anzufordern und dann per SetWindowLongPtr()/GetWindowLongPtr() auf diesen zuzugreifen.

David Scherfgen

Administrator

Beiträge: 10 172

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

18.06.2018, 18:20

Du kannst mit SetWindowLongPtr beliebige Daten mit einem Fenster assoziieren und mit GetWindowLongPtr diese Daten wieder abfragen. Als Index kannst du DWLP_USER nehmen. Du kannst alle Variablen, die du pro Fenster speichern möchtest, in ein struct packen.

Edit: dot war schneller :P

Werbeanzeige