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/ (...)
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
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 ?
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
}
Prøv at starte med at læse tutorial [1-4] på denne side:
http://www.winprog.org/ (...)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..).
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?
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.
Fik du svar nok på dit spørgsmål ?