Avatar billede mikkeljans Nybegynder
17. januar 2004 - 16:10 Der er 8 kommentarer og
1 løsning

Visual C++ OpenGL MUS

Hvordan laver man en bool der er True hvis Venstre/Midter/Højre museknap bliver trykket?.. Og False når man giver slip..
Og hvordan forøger man en float variabel når musen bliver rykket i en bestemt retning?

Har Visual C++ ikke nogen indbygget functioner man kan få en liste over eller noget?
Eller findes der en web side hvor man kan få en liste over de forskelle windows funktioner og hvad de bruges til?
Avatar billede soreno Praktikant
17. januar 2004 - 17:46 #1
MSDN indeholder alt den dokumentation du skal bruge.

Spørgsmålet er bare at finde det.

Siden findes her: msdn.microsoft.com


Du skal kigge lidt på WM_MOUSE*, f.eks.
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_mousemove.asp
Avatar billede mikkeljans Nybegynder
17. januar 2004 - 18:27 #2
Burde jeg så ikke kunne sige..

if(WM_MBUTTONDOWN)
{
kode..
}

??
Gør jeg det kører koden hele tiden selvom musen ikke er trykket ned
Avatar billede soreno Praktikant
17. januar 2004 - 18:30 #3
Du er nok nødt til at poste lidt mere kode. Det er svært at genneskue hvad du laver ud fra den bid du har sendt.

Princippet er at din message callback metode håndterer det. Den plejer at være bygge op vha. en switch/case konstruktion.

Lige for at få det på det rene, er det MFC eller Win32 du bruger ?
Avatar billede mikkeljans Nybegynder
17. januar 2004 - 18:37 #4
Ved jeg ikke...
Jeg programmere i OpenGL.
Jeg har loop der kører konstant og tegne mit OpenGL billede.. Og inde i den loop er der nogen "if" der styrer forskellige ting i mit program.
Det virker fint med Keybord f.eks:
            if (keys[VK_LEFT])
            {
                    degreesLR += 3;

            }
Den kode kører når jeg holder Pil til venstre nede..
Men jeg vil gerne have musen skal styrer det... På en eller anden måde

Det hele inden for den funktion ser sådan her ud:
int WINAPI WinMain(    HINSTANCE    hInstance,            // Instance
                    HINSTANCE    hPrevInstance,        // Previous Instance
                    LPSTR        lpCmdLine,            // Command Line Parameters
                    int            nCmdShow)            // Window Show State
{
    MSG        msg;                                    // Windows Message Structure
    BOOL    done=FALSE;                                // Bool Variable To Exit Loop

    // Create Our OpenGL Window
    if (!CreateGLWindow("Poly Modeller",700,500,16,fullscreen))
    {
        return 0;                                    // Quit If Window Was Not Created
    }

    while(!done)                                    // Loop That Runs While done=FALSE
    {
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))    // Is There A Message Waiting?
        {
            if (msg.message==WM_QUIT)                // Have We Received A Quit Message?
            {
                done=TRUE;                            // If So done=TRUE
            }
            else                                    // If Not, Deal With Window Messages
            {
                TranslateMessage(&msg);                // Translate The Message
                DispatchMessage(&msg);                // Dispatch The Message
            }
        }
        else                                        // If There Are No Messages
        {
            // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
            if ((active && !DrawGLScene()) || keys[VK_ESCAPE])    // Active?  Was There A Quit Received?
            {
                done=TRUE;                            // ESC or DrawGLScene Signalled A Quit
            }
            else                                    // Not Time To Quit, Update Screen
            {
                SwapBuffers(hDC);                    // Swap Buffers (Double Buffering)
            }

            if (keys[VK_F1])                        // Is F1 Being Pressed?
            {
                keys[VK_F1]=FALSE;                    // If So Make Key FALSE
                KillGLWindow();                        // Kill Our Current Window
                fullscreen=!fullscreen;                // Toggle Fullscreen / Windowed Mode
                // Recreate Our OpenGL Window
                if (!CreateGLWindow("NeHe's Solid Object Tutorial",640,480,16,fullscreen))
                {
                    return 0;                        // Quit If Window Was Not Created
                }
            }

            if (WM_LBUTTONDOWN)
            {
                    degreesLR -= 3;

            }           
           
            if (keys[VK_LEFT])
            {
                    degreesLR += 3;

            }           
           
            if (keys[VK_UP])
            {
                    degreesUP += 3;

            }

            if (keys[VK_DOWN])
            {
                    degreesUP -= 3;

            }

            if (keys['Q'])
            {
                zoom = (float)zoom / 1.07;
            }

            if (keys['A'])
            {
                zoom = (float)zoom * 1.07;
            }

            if (keys['I'])
            {
                yPos += 0.1;
            }

            if (keys['K'])
            {
                yPos -= 0.1;
            }

            if (keys['J'])
            {
                xPos -= 0.1;
            }

            if (keys['L'])
            {
                xPos += 0.1;
            }



        /*    if ()
            {
                zoom = zoom * 1.001;
            }

*/

        }
    }

    // Shutdown
    KillGLWindow();                                    // Kill The Window
    return (msg.wParam);                            // Exit The Program
}
Avatar billede soreno Praktikant
17. januar 2004 - 18:47 #5
Prøv at starte med at læse tutorial [1-4] på denne side:
http://www.winprog.org/tutorial/

Det giver en ide om hvad et event er og hvordan man håndterer det.

Jeg synes faktisk at ovenstående kode er unødig kompliseret (men sådan synes jeg generelt om "nehe"'s kode..).
Avatar billede mikkeljans Nybegynder
17. januar 2004 - 19:03 #6
Tak.. jeg prøver at se på den Tutorial

Det var muligt at lave at få de ttil at virke ud fra en anden variabel med koden:
        case WM_LBUTTONUP:
            isClicked  = false;
            break;
        case WM_RBUTTONUP:
            isRClicked  = false;
            break;
        case WM_LBUTTONDOWN:
            isClicked  = true;
            break;
        case WM_RBUTTONDOWN:
            isRClicked  = true;
            break;

Hvad er det "Messages" sådan kort fortalt til?
Hvorfor har man ikke bare lavet f.eks WM_LBUTTONUP til en bool der enten er sand eller falsk efter om knappen er nede eller oppe?
Avatar billede soreno Praktikant
17. januar 2004 - 19:07 #7
Windows programmer virker ved at Operativ Systemet sender Messages når det påkræves (f.eks. at der skal repaintes, musen bevæges osv.).

Programmet bestemmer så selv hvad der skal gøres når en Message modtages, det gøres typisk i en callback metode.

Pointen er at programmet først behøver at reagere når en Message modtages, dermed spares resourcer da programmet ikke bruger unødig cputid på ingen ting.
Avatar billede mikkeljans Nybegynder
17. januar 2004 - 19:13 #8
Okay Tak for hjælpen.
Avatar billede soreno Praktikant
17. januar 2004 - 19:20 #9
Fik du svar nok på dit spørgsmål ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester