dax Skrevet 10. januar 2006 Del Skrevet 10. januar 2006 Hvordan får jeg ei while-løkke til å kjøre så lenge brukeren holder museknappen ned, og at løkken stopper når brukeren slipper opp knappen. Noen som har en kjapp kode på dette noe sted? En tanke jeg hadde var å benytte seg av en bool variabel i klassen, som settes false når brukeren slipper knappen. Problemet er at dette ikke går så lenge while-løkken går ser det ut som. Noen som har en bedre løsning? Lenke til kommentar
Dead_Rabbit Skrevet 10. januar 2006 Del Skrevet 10. januar 2006 Tror du blir nødt til å bruke noen bibloteker for dette. Det er veldig lett i f.eks. SDL, men det er vel kansje ikke helt hva du er ute etter... (?) Lenke til kommentar
d0ppler Skrevet 10. januar 2006 Del Skrevet 10. januar 2006 du bør ihvertfall trådstyre dette, slik at ikke hele maskinen går i heng mens brukeren har museknappen nede, men det viste du kanskje Lenke til kommentar
GeirGrusom Skrevet 10. januar 2006 Del Skrevet 10. januar 2006 bool mouse_down; bool app_running = true; void DoEvents() { MSG msg; PeekMessage(NULL, &msg, 0, 0, PM_REMOVE) TranslateMessage(NULL, &msg); DispatchMessage(&msg); } HRESULT WndProc(HWND hWnd, int msg, WPARAM wParam, LPARAM lParam) { switch(msg) { WM_RBUTTONDOWN: WM_LBUTTONDOWN: mouse_down = true; break; WM_RBUTTONUP: WM_LBUTTONUP: mouse_down = false; break; WM_CLOSING: app_running = false; PostQuitMessage(); default: DefaultWndProc(hWnd, msg, wParam, lParam); break; } } void MyLoop() { mouse_down = false; while(app_running) { DoEvents(); while(mouse_down) { DoEvents(); } } } Satt på jobben når jeg skrev dette, så jeg vet ikke om det er riktig bruk av funksjoner, men tror det i teorien skal fungere. Lenke til kommentar
dayslepr Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 (endret) Komplett eksempel som passer på at ikke resten av GUI'et ditt «låser seg» (hindres i å redrawes f.eks.) når loopen kjøres: /* gcc `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -lpthread -Wall -g mouse-button.c -o mouse-button */ #include <stdio.h> #include <gtk/gtk.h> #include <pthread.h> volatile char button_down = 0; pthread_t background_thread; void* theLoop(void* not_used) { while(button_down) { printf("button is down!\n"); } printf("..not anymore, so exited loop!\n"); return 0; } // theLoop void destroy(GtkWidget* widget, gpointer data) { gtk_main_quit (); } // destroy gboolean buttonPress(GtkWidget* widget, GdkEventButton* event, gpointer data) { button_down = 1; pthread_create(&background_thread, 0, theLoop, 0); return FALSE; } // buttonPress gboolean buttonRelease(GtkWidget* widget, GdkEventButton* event, gpointer data) { button_down = 0; return FALSE; } // buttonPress int main(int argc, char** argv) { gtk_init(&argc, &argv); GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "delete_event", G_CALLBACK(destroy), 0); g_signal_connect(window, "button_press_event", G_CALLBACK(buttonPress), 0); g_signal_connect(window, "button_release_event", G_CALLBACK(buttonRelease), 0); gtk_widget_set_events(window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_widget_show_all(window); gtk_main(); return 0; } // main Denne bruker GTK+ og Pthreads; begge biblioteker er tilgjengelige under Linux, Windows og sikkert andre. Edit: Kanskje noen skulle postet et eksempel i QT eller GTKMM (begge C++) også? Endret 12. januar 2006 av dayslepr Lenke til kommentar
dax Skrevet 11. januar 2006 Forfatter Del Skrevet 11. januar 2006 Noen som ratt har et eksempel på hvordan dette er mulig å få til i Visual C++ også?? Lenke til kommentar
Dead_Rabbit Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 Du kan bruke disse eksemplene i VC++. Du må bare linke med de rette biblotekene... Lenke til kommentar
Giddion Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 vel det skal vel sies at vc++ også er c++. men hvis du skal lage det i ren windowsAPI så må du sette opp en WndProc(Window Message Callback) for se etter at msg == EnEllerAnnenMus_msg (se GeirGrusom´s sin kode) MSDN About Messages and Message Queues håper denne hjelper og lykke til Lenke til kommentar
dayslepr Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 (endret) Noen som ratt har et eksempel på hvordan dette er mulig å få til i Visual C++ også?? 5419756[/snapback] jupp, som zirener sier; dette fungerer v.h.a. VC++ også .. både Pthreads og GTK+ er portable biblioteker (men hvem vil vel bruke VC++ (frivillig)? .. GCC (som så klart også finnes til Windows) er jo «Godmode» i forhold; hah! \o/ ) Endret 12. januar 2006 av dayslepr Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå