|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 18.04.2004, 19:31 Titel: Problem: Fenster und MessageBox() |
|
|
Hi! Also mein Problem: Ich habe ein Fenster, das einiges kann *g
Z.b. liegt auf der F1 Taste eine Help MSGbox und auf F5 eine greetz msg box.
Nur das blöde ist, egal welche taste ich drücke, es erscheint immer die msgbox aus f1 *g
Ich vermute mal es hat was mit meiner case WM_KEYDOWN: anweisung zutun, aber schaut selbst!
Code: |
// Fenster kreeiren
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
fclose(MausPos);
}
case VK_F1:
MessageBox(0,"Funktionen:\n F1= Help\n F5= Greetings\n Esc=Beendet das Programm und öffnet MausPos.txt\n LM= Zeichnet das Fenster neu, schreibt ein Hallo\n RM= Zeichnet ein Rechteck ","Help",MB_OK);
return 0;
break;
case VK_F5:
MessageBox(0,"Greetz 2:\nuall\nImperium01\nBrollyLSSJ\nViscountPherget\njolt ","About..",MB_OK);
return 0;
break;
//Funktionen für andere Tasten
|
könnt ihr mir sagen wo es wurmt? bin bei fenstern noch ziemlich unerfahren ! |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.04.2004, 19:44 Titel: |
|
|
Es sieht so durcheinander aus, ich kann kaum was erkennen . Du musst schon nach dem WM_KEYDOWN sehen, dass du das switch-Statement richtig benutzt, break kann auch nicht schaden:
Code: |
switch(msg)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_F1: .... break;
case VK_F2: .... break;
}
break;
}
|
C. |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 18.04.2004, 19:52 Titel: |
|
|
Verzeihung :\ ich muss mir noch einen guten stil antrainieren! ich verspreche, ich werde es übersichtlicher machen beim naechsten mal
Danke für die schnelle Hilfe, werde mich gleich dransetzen |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 18.04.2004, 19:57 Titel: |
|
|
Code: | case WM_KEYDOWN:
{
switch(wParam)
case VK_ESCAPE:
PostQuitMessage(0);
fclose(MausPos);
break;
case VK_F1:
MessageBox(0,"Funktionen:\n F1= Help\n F5= Greetings\n Esc=Beendet das Programm und öffnet MausPos.txt\n LM= Zeichnet das Fenster neu, schreibt ein Hallo\n RM= Zeichnet ein Rechteck ","Help",MB_OK);
break;
case VK_F5:
MessageBox(0,"Greetz 2:\nuall\nImperium01\nBrollyLSSJ\nViscountPherget\njolt ","About..",MB_OK);
break;
} |
So hab ich das nun *G. Nur kann ich nun die F tasten nich benutzen bzw. er reagiert nicht drauf |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.04.2004, 20:03 Titel: |
|
|
Dann muss du mal den kompletten Code posten.
C. |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 18.04.2004, 20:11 Titel: |
|
|
Code: | #include <windows.h>
#include <string.h>
#include <stdio.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Das Fensterhandle
HWND hWnd = 0;
//Rand_ex funktion (c) by hazel ;-)
int a;
int b;
int rand_ex(int min, int max)
{
return ( rand() % (max - min) ) + min;
}
FILE *MausPos; //Datei für MausPos. anlegen
//MausPos. Ort
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
MausPos = fopen("C:\\MausPos.txt","w"); //MausPos wird zum Schreiben geöffnet
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return 0;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(GetMessage(&msg,NULL,0,0))
{
// Nachricht an die Callbackfunktion senden
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"SimpleWindow", // Fenstertitel
WS_TABSTOP | //Fenster
WS_VISIBLE, // Eigenschaften
100, 100, 400, 300, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
// testen, um welche Nachticht es sich handelt
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_LBUTTONDOWN:
int x1,y1,x2,y2;
hDC = GetDC(hWnd);
x1 = LOWORD(lParam);
y1 = HIWORD(lParam);
x2 = x1 + 50;
y2 = y1 + 50;
Rectangle(hDC,x1,y1,x2,y2);
ReleaseDC(hWnd,hDC);
return 0;
break;
case WM_KEYDOWN:
{
switch(wParam)
case VK_ESCAPE:
PostQuitMessage(0);
fclose(MausPos);
break;
case VK_F1:
MessageBox(0,"Funktionen:\n F1= Help\n F5= Greetings\n Esc=Beendet das Programm und öffnet MausPos.txt\n LM= Zeichnet das Fenster neu, schreibt ein Hallo\n RM= Zeichnet ein Rechteck ","Help",MB_OK);
break;
case VK_F5:
MessageBox(0,"Greetz 2:\nuall\nImperium01\nBrollyLSSJ\nViscountPherget\njolt ","About..",MB_OK);
break;
}
case WM_RBUTTONDOWN:
a = rand_ex(0,400);
b = rand_ex(0,300);
InvalidateRect(hWnd,0,TRUE);
PAINTSTRUCT ps;
hDC = BeginPaint(hWnd,&ps);
for(int i=0;i<200;i+=18)
{
SetTextColor(hDC,RGB(i,100,0));
TextOut(hDC,a,b,"Hallo",5);
}
EndPaint(hWnd,&ps);
return 0;
break;
case WM_MOUSEMOVE:
int x,y;
char String[25];
hDC = GetDC(hWnd);
x = LOWORD(lParam);
y = HIWORD(lParam);
sprintf(String,"MousePos. -> %-4d %-4d",x,y);
fprintf(MausPos,"%-4d %-4d\n",x,y);
TextOut(hDC,0,259,String,strlen(String));
ReleaseDC(hWnd,hDC);
return 0;
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
|
im compiler sah's übersichtlicher aus als hier :]
hoffe du kannt es so einigermaßen lesen
übrigens machen fenster und gdi spaß ;D
das naechste kapitel is dann vererbung, kapitel 14
Zuletzt bearbeitet von Kronos am 19.04.2004, 13:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 18.04.2004, 20:48 Titel: |
|
|
Ich will Copyright auf meine rand_ex-Funktion!!! ;P |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.04.2004, 20:51 Titel: |
|
|
Nach dem
Code: |
case WM_KEYDOWN:
{
switch(wParam)
|
fehlt eine {
C. |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 19.04.2004, 13:11 Titel: |
|
|
immer diese kleinen fehler ;-]
Danke für die Hilfe, ich hoffe, ich habe nicht genervt...
Hazel, schau nochma' in den Quellcode ) |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|