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

07.08.2009, 14:06

[gelöst] Maske durch Drücken der Leertaste öffen

Hallo,

ich möchte eine Maske durch Drücken der Leertaste öffnen.

Der folgende Code steht in einem Unterprogramm:

Quellcode

1
2
3
4
5
if (getPressKey??? )
{
KillTimer(hwnd, TIMER_1);
//Hier soll dann die Maske "projektil_maskenprogramm" geöffnet werden
}


Die Fragen wären wie der getPressKey-Aufruf für die Leertaste lautet und wie ich das projektil_maskenprogramm richtig aufrufe.

Vielen Dank schon mal.
Dani

2

07.08.2009, 14:10

Öhm, etwas genauere Informationen wären doch schon hilfreich.
Welche API benutzt du für Inputsachen? Windows API? DirectInput?

Und was bitte meinst du mit "projektil_maskenprogramm".

Steh ich grad nur auf'n Schlauch und seh's einfach nich?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

07.08.2009, 14:39

Schau dir mal das an: http://msdn.microsoft.com/en-us/library/ms646281.aspx

Was is dein "projektil_maskenprogramm". Is das ne eigenständige exe!?
Falls ja:

http://msdn.microsoft.com/en-us/library/ms682425.aspx
http://msdn.microsoft.com/en-us/library/bb762153.aspx

4

07.08.2009, 15:16

Entschuldigung, das habe ich natürlich vergessen. War mal wieder zu undeutlich...

Es soll alles in WinAPI passieren.

Das "projektil_maskenprogramm" ist das Unterprog. für die Eingabemaske. Ich häng mal Auszuüge aus meiner unterprogramm.c an:

Quellcode

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
BOOL ball_zeichnen (HWND hwnd)
{
    // Vorbereitung
    //
    HDC hdc ;
    PAINTSTRUCT ps ;

    int farbmischung;       //Farbe des Kreises
    HBRUSH pinsel;      //Pinseltyp von MS vorgegeben

    double x, y;
    //int v0;       //Anfangsgeschwindigkeit

    double winkel;
    //double hilfswinkel;
    int g=20;

    //Zufällige Zahlen ausrechnen wenn nicht fest definiert
    if (v0 == 0)
        {
            srand(time(NULL));
            v0 = rand () % 10+1;
            hilfswinkel = rand () % 89+1;

            //Zur Kontrolle in Konsole
            printf("\nZufallszahl: v0 ist %i", v0);
            printf("\nZufallszahl: hilfswinkel ist %f", hilfswinkel);
        }


    //Abschusswinkel ausrechnen
    hilfswinkel; // in Grad
    winkel=-((hilfswinkel*PI)/180); //Umrechnung in rad
    printf("\nmeine_Unterprogramme.c:Winkel hat den Wert %f", winkel); //Ausgabe Konsole

    //zeitabhängige Variable t hochzählen
    t=t+1;
    printf("\nmeine_Unterprogramme.c:Variable t hat den Wert %i", t); //Ausgabe Konsole

    //Definition der Bewegung
    x=0.5*v0*cos(winkel)*t;
    y=0.5*v0*sin(winkel)*t;

    //Definition der Abbruchbedingen
    abbruchzaehler = v0*t;

    if (abbruchzaehler >= 1500)
        {
            KillTimer(hwnd,TIMER_1);
            t = 0;
            v0 = 0;
            hilfswinkel = 0;


        }
        
    if (getPressKey??? )
        {
            KillTimer(hwnd, TIMER_1);
            //Hier soll dann die Maske "projektil_maskenprogramm" geöffnet werden
        }


    InvalidateRect (hwnd, NULL, TRUE) ;
    hdc = BeginPaint (hwnd, &ps);

    //Zeichenbefehle
    //
    farbmischung = RGB(255, 0, 0);      // Hier kann die Farbe des Kreises verändert werden
    pinsel = CreateSolidBrush (farbmischung);
    SelectBrush(hdc, pinsel);

    SetViewportOrgEx(hdc, 5, 410, NULL);        // Hier kann der Mittelpunkt der ~Kreisbewegung verändert werden

    Ellipse(hdc, (int) x-20, (int) y-20, (int)x+20, (int) y+20);        //Hier kann der Kreisdurchmesser verändert werden

    DeleteObject(pinsel);

    //Nachbearbeitung
    //
    EndPaint (hwnd, &ps) ;
    UpdateWindow(hwnd);
    return 0;

//-------------------------------------------------
// hier ist geschnitten
//-------------------------------------------------

char feld_3 [3];
char feld_4 [3];
int zahl_3, zahl_4;

BOOL APIENTRY projektil_maskenprogramm (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{


    switch(msg)
    {
        case WM_INITDIALOG:
                        // Dieser Teil wird durchlaufen, wenn Maske
                        // das 1. Mal geoeffnet wird
                            printf("\nProjektilmaske: Die Maske wurde aufgemacht");
        break;

        case WM_COMMAND:
                        // Dieser Teil wird durchlaufen,
                        // wenn in Maske etwas ausgefuehrt werden soll.

            switch (LOWORD(wParam))
            {
                case EINGABEFELD_3:
                            printf("\nProjektilmaske: Es erfolgt eine Aktion im EINGABEFELD_3");
                break;

                case EINGABEFELD_4:
                            printf("\nProjektilmaske: Es erfolgt eine Aktion im EINGABEFELD_4");
                break;

                case KNOPF_1:
                            printf("\nNun wurde der Knopf KNOPF_2 gedrueckt");
                            Edit_GetText(GetDlgItem(hwnd, EINGABEFELD_3), feld_3, 3);
                            // 2 Zeichen aus Eingabegfeld_1 werden gelesen
                            Edit_GetText(GetDlgItem(hwnd, EINGABEFELD_4), feld_4, 3);
                            // 2 Zeichen aus Eingabegfeld_2 werden gelesen

                            //Text in Zahlen umwandeln für die Kontrolle in der Konsole
                            zahl_3 = atoi (feld_3);
                            zahl_4 = atoi (feld_4);

                            //Zahlen an Bewegung übergeben
                            pro_v0 = atoi (feld_3);
                            pro_hilfswinkel = atoi (feld_4);

                            //Zur Kontrolle Ausgabe der Zahlen in der Konsole
                            printf("\nProjektilmaske: Eingabezahl_1: %d", zahl_3);
                            printf("\nProjektilmaske: Eingabezahl_2: %d", zahl_4);


                break;

            }
        break;

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


Ich hoffe, dass es so klar wird.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

07.08.2009, 15:26

Wenn ich das richtig seh dann soll projektil_maskenprogramm eine Dialog Prozedur sein (was auch immer genau HandleDefaultMessages() ist)!? Ich tippe mal drauf dass du eine Dialog Ressource hast und die jetzt laden willst. In dem Fall: DialogBox() (wenn der Dialog modal sein soll, d.h. erst wieder geschlossen werden muss bevor der Benutzer was andres machen kann) oder CreateDialog() (wenn du einfach nur ein Dialog Fenster haben willst. Bei CreateDialog musst du selber eine Nachrichtenschleife für den Dialog machen (http://msdn.microsoft.com/en-us/library/ms645498.aspx)!).
Schau dir vielleich mal das an: http://msdn.microsoft.com/en-us/library/ms632588.aspx bzw. http://msdn.microsoft.com/en-us/library/ms644996.aspx

Da du offensichtlich eh ein Fenster hast in das du den Ball zeichnest würd ich dir zum Abfragen der Leertaste empfehlen dass du einfach die WM_KEYUP Nachricht in diesem Fenster behandelst...

6

08.08.2009, 07:37

Hallo,

nach einigem Hin und Her hat es über WM_KEYUP funktioniert. Danke.

Dani

Werbeanzeige