Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [Visual C++] Togliere uno stile ad un CButton

    Se io creo un CButton (un pulsante, per intenderci), dopo posso usare la funzione membro SetButtonStyle() per aggiungere uno stile.

    Conoscete un modo per poi togliere questo stile impostato?!?!
    *********************************
    Andrea
    *********************************

  2. #2

    Re: [Visual C++] Togliere uno stile ad un CButton

    Originariamente inviato da Squall1988
    Se io creo un CButton (un pulsante, per intenderci), dopo posso usare la funzione membro SetButtonStyle() per aggiungere uno stile.

    Conoscete un modo per poi togliere questo stile impostato?!?!
    E' da tanto che non lavoro con le MFC comunque per togliere uno stile io facevo così:
    mi recuperavo lo stile corrente con GetWindowStyle() (o GetStyle() ora nn ricordo) metodo di CWnd, poi gli applicavo gli operatori bit a bit, qualcosa come

    currentStyle &= ~WS_STYLE_CODE;
    dove WS_STYLE_CODE era lo stile da levare

    ed infine riapplicavo il nuovo stile con setStyle
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    grazie, pare funga, ma ora ho un altro problema, la proprietà DEFPUSHSTYLE non dovrebbe far si che il pulsante che ce l'ha sia premuto automaticamente con il tasto INVIO???
    Xkè a me continua a premere quello precedente anche se gli ho tolto la proprietà.
    In pratica, vorrei che quando si entra in una determinata casella di testo, il pulsante di default diventi un altro.
    ho provato con

    codice:
    void CCalcDlg::OnSetfocusNOME() 
    {
    	// TODO: Add your control notification handler code here
    	UpdateData (true);
    	UINT style = m_calcola.GetButtonStyle();
    	style &= ~BS_DEFPUSHBUTTON;
    	m_calcola.SetButtonStyle (style);
    	m_salva.SetButtonStyle (BS_DEFPUSHBUTTON);
    	UpdateData (false);
    }
    m_salva e m_calcola sono le variabili dei pulsanti e questa funzione è richiamata al focus della casella di testo. solo che si, graficamente il pulsante m_salva fa ciò che deve fare, ma premendo invio non viene richiamata la sua funzione di evento CLICKED...

    *********************************
    Andrea
    *********************************

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    :rollo: :rollo:
    *********************************
    Andrea
    *********************************

  5. #5
    Originariamente inviato da Squall1988
    grazie, pare funga, ma ora ho un altro problema, la proprietà DEFPUSHSTYLE non dovrebbe far si che il pulsante che ce l'ha sia premuto automaticamente con il tasto INVIO???
    Xkè a me continua a premere quello precedente anche se gli ho tolto la proprietà.
    In pratica, vorrei che quando si entra in una determinata casella di testo, il pulsante di default diventi un altro.
    ho provato con

    codice:
    void CCalcDlg::OnSetfocusNOME() 
    {
    	// TODO: Add your control notification handler code here
    	UpdateData (true);
    	UINT style = m_calcola.GetButtonStyle();
    	style &= ~BS_DEFPUSHBUTTON;
    	m_calcola.SetButtonStyle (style);
    	m_salva.SetButtonStyle (BS_DEFPUSHBUTTON);
    	UpdateData (false);
    }
    m_salva e m_calcola sono le variabili dei pulsanti e questa funzione è richiamata al focus della casella di testo. solo che si, graficamente il pulsante m_salva fa ciò che deve fare, ma premendo invio non viene richiamata la sua funzione di evento CLICKED...

    Aspetta ma quello che vuoi ottenere è solo che se quando stai editando la casella di testo premi invio viene eseguito il metodo gestore del click del pulsante salva?
    Se è così stai sbagliando proprio tutto l'approccio, devi solo gestire l'evento di pressione del tasto invio sulla casella di testo e in tale metodo richiamare il metodo gestore del clik di quel pulsante.In alt6re parole se i duel metodi sono:

    void CCalcDlg::OnKeyPressedNOME(parametro indicante iltasto premuto)
    {

    if(tasto_premuto == INVIO)
    {
    OnClickedSalva();
    }
    }
    void CCalcDlg::OnClickedSalva()
    {
    ......
    }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    credo di non averci capito niente... le funzioni membro di CCalc devono essere associate a dei messaggi predefiniti (tipo BN_CLICKED), ma non ho visto nessun messaggio per la pressione di un tasto
    *********************************
    Andrea
    *********************************

  7. #7
    Originariamente inviato da Squall1988
    credo di non averci capito niente... le funzioni membro di CCalc devono essere associate a dei messaggi predefiniti (tipo BN_CLICKED), ma non ho visto nessun messaggio per la pressione di un tasto
    Come n on ci hai capito niente? La programmazione con mFC è guidata dagli eventi,quando ad esempio il mouse preme un tasto ,c'è stato un EVENTO e la notifica dell'avvenimento da parte del controllo è effettuata mediante l'invio di un MESSAGGIO della forma WM_BUTTON_CLICKED (WM sta per Windows Message) che altro non è che una struttura dati contenente tutte le informazioni necessarie a capire cos'è accaduto.Ebbene le MFC come avrai visto ti consentono di associare dei metodi mebro di una classe a tua scelta (creati apposta), ad ogni messaggio.Cosa c'è che non è chiaro scusa?Quando nell box di testo viene premuto il tasto invio il box invia comunque un messggio di notifica all'applicazione,sta poi a te decidere se gstire o no quel messaggio.Per risolvere il tuo problema devi solo creare un metodo gestore per la pressione di invio nel box ditesto, un metodo gestore per il click su salva e fare si che il primo metodo rihiami il secondo,è tutto chiaro ora?Sempre se ho capito qual'è il comportamento che vuoi ottenere...
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    si ma se nn so quale messaggio si genera quando viene premuto invio come faccio a rilevare l'evento?
    *********************************
    Andrea
    *********************************

  9. #9
    Originariamente inviato da Squall1988
    si ma se nn so quale messaggio si genera quando viene premuto invio come faccio a rilevare l'evento?
    Sicuramete un evento di tastiera,quindi VisualC++ ti metterà tra i possibili eventi che il text box può generare qualcosa come WM_KEY_PRESSED o TYPED, intercettalo aggingedo un gestore.Quel gestore ti verrà creato con una parametro e poi cerca su google per il giusto valore che corrispnde al tato invio, io non mi ricordo mi spiace
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.