JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=baf5bb6b63ebd73a838c2b6d5cc98006Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem: Fenster und MessageBox()

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 19:31    Titel: Problem: Fenster und MessageBox() Antworten mit Zitat

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 ! Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 19:44    Titel: Antworten mit Zitat

Es sieht so durcheinander aus, ich kann kaum was erkennen Smile. 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 19:52    Titel: Antworten mit Zitat

Verzeihung :\ ich muss mir noch einen guten stil antrainieren! ich verspreche, ich werde es übersichtlicher machen beim naechsten mal Smile
Danke für die schnelle Hilfe, werde mich gleich dransetzen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 19:57    Titel: Antworten mit Zitat

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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 20:03    Titel: Antworten mit Zitat

Dann muss du mal den kompletten Code posten.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 20:11    Titel: Antworten mit Zitat

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 Smile

übrigens machen fenster und gdi spaß ;D
das naechste kapitel is dann vererbung, kapitel 14 Smile


Zuletzt bearbeitet von Kronos am 19.04.2004, 13:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 20:48    Titel: Antworten mit Zitat

Ich will Copyright auf meine rand_ex-Funktion!!! ;P
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.04.2004, 20:51    Titel: Antworten mit Zitat

Nach dem

Code:

case WM_KEYDOWN:
   {
   switch(wParam)


fehlt eine {

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 19.04.2004, 13:11    Titel: Antworten mit Zitat

immer diese kleinen fehler ;-]

Danke für die Hilfe, ich hoffe, ich habe nicht genervt...

Hazel, schau nochma' in den Quellcode Wink)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum