On-Mouse-Over-Funktion ? Wie ?



  • Nur ein "|" bedeutet es ist eine bitweise Oder-Verknüpfung.
    Die logische Oder-Verknüpfung besteht aus 2 "|"
    also: Expression1 || Expression2



  • du hast den Bit-Operator "|" genommen anstatt "||"



  • n()()bi schrieb:

    Was ist an der if-Abfrage bitte falsch ?

    http://www.cpp-tutor.de/cpp/le05/le05_01.htm#mbed
    den kasten lesen 😉
    http://www.cpp-tutor.de/cpp/le03/le03_02.htm#bit

    [edit]
    zwei minuten zum links suchen, auch net schlecht 😃 😃 🕶



  • Naja, wieder was gelernt ^^! Also, hier seht ihr einmal, was ich bis jetzt - erfolglos - zusammengebastelt habe:

    string activehome;
    
       switch (message)
       {
        case WM_PAINT:
          {
           PAINTSTRUCT ps;
    
            HDC hDC = BeginPaint(hWnd, &ps);
             const char  Test[] = "Ouch";
    
             if(activehome == "a"){
              TextOut(hDC, 7,50, Test, sizeof(Test) - 1);
             }
    
            EndPaint(hWnd, &ps); 
    
           return 0;
          }
    
       case WM_COMMAND:
          {
           GetCursorPos(&pt);
    
            if((pt.x >= 1) || (pt.y >= 1) || (pt.x <= 200) || (pt.y <= 200)){
             activehome = "a";
              InvalidateRect(hWnd, NULL, TRUE);
            }
    
           return 0;
          }
    
    }
    

    Hoffe jemand kann dieses - hoffentlich kleine - Prob. debuggen ... ThX nochmal für eure Hilfe! MFG:

    n()()bi



  • also so spontan würd ich sagen muss

    if((pt.x >= 1) && (pt.y >= 1) && (pt.x <= 200) && (pt.y <= 200)){
        // code
    }
    

    heißen.
    die fläche die du meinst is doch rechteckig. oder seh ich das falsch?



  • Hatte ich auch schon ausprobiert, ging alles nicht ! Ooooh Man 😞



  • Sooo ... habe ein bisschen weiter in der MSDN gekruscht ... Folgendes:
    Um die Koordinaten ermitteln zu können braucht man die FUnktion Mousemove. Diese wird immer aufgerufen wenn die Mouse sich bewegt.

    case WM_MOUSEMOVE:
          {
    
          if(activated != "a"){
    
           long xPos = GET_X_LPARAM(lParam); 
           long yPos = GET_Y_LPARAM(lParam); 
    
           if((xPos >= 1) && (yPos >= 1) && (xPos <= 200) && (yPos <= 200)){
            activated = "a";
            activehome = "a";
           }
    
             InvalidateRect(hNavigation, NULL, FALSE);
          }
    
           return 0;
    
       }
    

    Habe eine zusätzliche Variable (activated) erstellt, die schaut, ob das Feld schon einmal berührt wurde, wenn nicht, dann soll er die Variable "activated" und "activehome" auf "a" setzen. Mein Problem liegt nur darin, dass er mir die beiden Variablen nicht auf "a" setzt !? Ich weiss nicht warum dass so ist?!

    Weiss jemand was da los ist?



  • tipp: wenn irgendetwas einfach nicht ausgeführt wird, dann stopf alle schleifen und bedingungen voll mit MessageBox-en, dann siehst du wie weit es kommt und wo es abbricht. oder, wenn du ansonsten bombadiert werden würdest, bastel etwas ganz kleines, was dann bei WM_PAINT einfach ausgegeben wird.



  • Ich weiss wo es nicht weitergeht!

    Das Problem liegt wahrscheinlich am Semilikon ... Da gibt es doch diese Regel, alles was in einem Block ist, ist für Funktionen außerhalb des Blockes nicht sichtbar ... D.h. Meine Variable muss für das "Äußere" sichtbar gemacht werden, nur die Frage ist wie ?!



  • n()()bi schrieb:

    D.h. Meine Variable muss für das "Äußere" sichtbar gemacht werden, nur die Frage ist wie ?!

    Dann musst du sie einfach außerhalb deklarieren - evtl. brauchst du auch einfach nur ein static davor?!



  • Juhu, funktioniert einwandfrei !!!!!! THX, Problem endlich gelöst ^-

    MFG:
    n()()bi



  • kann mir noch schnell jemand sagen, wieso TRACKMOUSEEVENT und TrackMouseEvent() bei mir plötzlich nicht mehr dem compiler bekannt ist?



  • Vielleicht bräuchtest du _TrackMouseEvent?! Ansonsten hilft vielleicht ein PSDK-Update 🙂



  • also ich hab das psdk von februar 2003 und hab die includes und libs im msdev an oberster stelle, also kann ich mir das beim besten willen nicht erklären..._TrackMouseEvent hilft übrigens auch nichts.



  • Herr-Vorragend schrieb:

    also ich hab das psdk von februar 2003 und hab die includes und libs im msdev an oberster stelle, also kann ich mir das beim besten willen nicht erklären...

    Hab' die Header-Files grad nicht da, aber evl. brauchst du noch ein entsprechendes define vor dem Einbinden von windows.h?!



  • k,danke, musste CommCtrl.h einbinden, komisch, dass das nicht in der msdn steht...


Anmelden zum Antworten