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

1

23.01.2014, 19:55

[gelöst] WINAPI Problem

Hallo Zusammen,

ich habe mich in letzter Zeit mit der WinAPI beschäftigt dabei bin ich auf folgendes Problem gestoßen.

Wenn ich in meiner Nachrichtenschleife die MausButtenUP (WM_LBUTTONUP ect.) Nachricht abfrage ist WPARAM immer 0 egal welchen Button ich drücke, bei der Nachricht für MausButtenDown funktioniert es wunderbar da hat WPARAM den richtigen Wert für die entsprechenden Buttons.

Da ich die API in eine Klasse gequetscht habe dachte ich es liegt daran, aber mit nicht Nichten. Wenn ich den Code hernehme der immer bei "Meine erstes richtiges Fenster" verwendet wird tritt dieser Fehler ebenfalls auf.
Trotzdem hier noch mal etwas Code

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    PWSTR pCmdLine, int nCmdShow)
{
  MSG  msg;    
  HWND hwnd;
  WNDCLASSW wc;
    
  wc.style         = CS_HREDRAW | CS_VREDRAW;
  wc.cbClsExtra    = 0;
  wc.cbWndExtra    = 0;
  wc.lpszClassName = L"Window";
  wc.hInstance     = hInstance;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  wc.lpszMenuName  = NULL;
  wc.lpfnWndProc   = WndProc;
  wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  
  RegisterClassW(&wc);
  hwnd = CreateWindowW( wc.lpszClassName, L"Window",
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                100, 100, 350, 250, NULL, NULL, hInstance, NULL);  

  ShowWindow(hwnd, nCmdShow);
  UpdateWindow(hwnd);

  while( GetMessage(&msg, NULL, 0, 0)) {
    DispatchMessage(&msg);
  }

  return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
    WPARAM wParam, LPARAM lParam)
{
  switch(msg)  
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    case WM_LBUTTONUP:
    case WM_RBUTTONUP:
    case WM_MBUTTONUP:
    case WM_XBUTTONUP:
         notifyButtonReleased(wParam, lParam); // wParam ist immer 0 egal bei welcher Taste
    break;
    case WM_LBUTTONDOWN:
    case WM_RBUTTONDOWN:
    case WM_MBUTTONDOWN:
    case WM_XBUTTONDOWN:
            notifyButtonPressed(wParam, lParam); // Arbeitet Korrect wParam hat die Richtige Taste
    break;

  return DefWindowProcW(hwnd, msg, wParam, lParam);
}


Hat jemand eine Idee woran das liegen könnte, bzw was mach ich falsch?

Danke und Gruß

Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (23.01.2014, 20:22)


Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

23.01.2014, 20:06

Versuchst du folgendes?
Linke Maustaste drücken -> Linke Maustaste loslassen -> wundern warum wParam 0 ist?

In wParam steht welche anderen Tasten gerade gedrückt sind. Welche Taste gerade losgelassen wurde erkennst du anhand der Nachricht.

3

23.01.2014, 20:16

Na toll nach dem du mich jetzt mit der Nase drauf gestoßen hast habe ich hier nochmal genau gelesen.

"wparam enthält die Taste die gerade gedrückt sind" grrrr

Bei ButtonDown geht's dann natürlich aber net bei Up :dash:

Alles klar danke dir für die schnelle Hilfe :)

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige