Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Win32 API: Simili diBN_PUSHED per i tasti: possibile?

    Salve a tutti, nel mio codice, utilizzando dei Button, sono dovuto ricorrere ad un timer nel caso in cui questo Button avesse mandato un messaggio di BN_PUSHED (dopo averlo, ovviamente, settato con SetWindowLong(), e fin qui tutto bene, se non fosse che dovevo sostituire questo Button con un tasto direzionale dalla tastiera che, ovviamente, non può mandare un messaggio BN_PUSHED, anche perché ha già una ripetizione propria. Il mio problema è che la ripetizione proprietaria dei tasti è veramente pessima: troppo poco veloce e fluida rispetto a quella che mi serve e che sono riuscito ad ottenere con il timer. La mia domanda è: esiste un modo per raggirare questo ostacolo come, ad esempio, eliminare il timer del tasto e metterne uno da me? (so che la domanda è assurda, ma mi serve sapere se è possibile farlo).
    Grazie anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ci sono gli hook, come i messaggi WM_KEY*. Per il timer puoi risolvere misurando il tempo che intercorre tra un messaggio all'altro. Ce anche GetAsyncKeyState per testare eventuali variazioni di stato. Se indicassi con un'esempio cosa vorresti fare sarebbe meglio.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Originariamente inviato da linoma
    Se indicassi con un'esempio cosa vorresti fare sarebbe meglio.
    Certo. Vorrei far muovere un bitmap. Ho provato prima con un button e poi con il tasto direzionale, ma è sorto quel problema. La parte di codice con il button:

    codice:
      if(Message==BN_PUSHED)
        SetTimer(hwnd,IDtimer,20,Muovi);
      if(uMsg==BN_UNPUSHED)
        KillTimer(hwnd, IDtimer);
    
    //Funzione Muovi
    
      RECT rect; // e qui seleziono la retta
      LPRECT lpRect=▭
      if(NavicellaX<WLimits.right)
        NavicellaX+=10;
      InvalidateRect(hwnd,lpRect,TRUE);
      UpdateWindow(hwnd);
    senza il button:

    codice:
    RECT rect; // e qui seleziono la retta
    LPRECT lpRect=&rect;
    
    case WM_KEYDOWN:
                 if(wParam==VK_RIGHT&&NavicellaX<WLimits.right)
                   NavicellaX+=10;
                 InvalidateRect(hwnd,lpRect,TRUE);
                 UpdateWindow(hwnd);
                 break;
    EDIT: non so perché non lo fa vedere, ma ovviamente lpRect=&rect

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.