OnVScroll ändert den Wert nur auf 0



  • Hi,

    ich möchte in meinem Prgramm ein Wert in der EditBox mit einer ScrollBar inkrementieren oder dekrementiere.
    Wenn ich auf up oder down klicke wird der Wert nicht inkrementier sondern nur auf 0 gesetzt und mehr geht da nicht.
    Da ich eine Dezimalstelle ändern will pro klick wird der Wert der Edit Box noch mit 10 multipliziert. Aber das wisst ihr sicher.

    Den Wert auf 5 (Standard) setzen geht einwandfrei.

    Hier der Code der die EditBox ändern sollte.

    IDC_SPIN_BREITE - ScrollBar Breite
    IDC_E_BREITE - EditBox Breite
    IDC_SPIN_LAENGE - ScrollBar Laenge
    IDC_E_LAENGE - EditBox Laenge

    m_strEBreite - CSTring von IDC_E_Breite
    m_strELaenge - CString von IDC_E_Laenge

    diese Infos sollten reichen oder?

    void CEingabe::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    	if ( nSBCode == SB_ENDSCROLL ) 
    	{ return ;   // falsche Nachrichten zurückweisen
    	}
    
    	if ( pScrollBar -> GetDlgCtrlID() == IDC_SPIN_BREITE )
    	{	m_dEBreite = double ( nPos ) / 10.0 ; 
    		m_strEBreite . Format ( "%2.1f" , m_dEBreite ) ; 
    		SetDlgItemText ( IDC_E_BREITE , m_strEBreite ) ; 
    	}
    
    	if ( pScrollBar -> GetDlgCtrlID() == IDC_SPIN_LAENGE )
    	{	m_dELaenge = double ( nPos ) / 10.0 ; 
    		m_strELaenge . Format ( "%2.1f" , m_dELaenge ) ; 
    		SetDlgItemText ( IDC_E_LAENGE , m_strELaenge ) ; 
    	}
    }
    

    Hier werden die Daten noch geladen falls sie von Hand geändert werden.

    void CEingabe::OnKillfocusEBreite() 
    {
    	int Drehfeldwert ; 
    
    	GetDlgItemText ( IDC_E_BREITE , m_strEBreite ) ; 
    	m_dEBreite = atof ( m_strEBreite ) ; 
    	Drehfeldwert = int ( 10.0 * m_dEBreite ) ; 
    
    	if (  ( Drehfeldwert < 10 ) || ( 100 < Drehfeldwert )  )
    		Drehfeldwert = 50 ;		// bei falschem Wert: default setzen
    
    	CSpinButtonCtrl * pSpin = ( CSpinButtonCtrl * ) GetDlgItem ( IDC_SPIN_BREITE ) ; 
    	pSpin -> SetPos ( Drehfeldwert ) ; 
    
    	m_dEBreite = double ( Drehfeldwert ) / 10.0 ; 
    	m_strEBreite . Format ( "%2.1f" , m_dEBreite ) ; 
    	GetDlgItemText ( IDC_E_BREITE , m_strEBreite ) ; 
    }
    

    Danke für die Hilfe.



  • Standard schreibt man mit d.

    Ich verstehe nicht, wieso du nicht einfach selbst inkrementierst?

    if ( pScrollBar -> GetDlgCtrlID() == IDC_SPIN_BREITE && nSBCode sagt dass nach unten gescrollt wurde)
        {    m_dEBreite += 0.1d ; 
            m_strEBreite . Format ( "%2.1f" , m_dEBreite ) ; 
            SetDlgItemText ( IDC_E_BREITE , m_strEBreite ) ; 
        }
    

    rest analog



  • Danke schön.

    Wieso auch kompliziert, wenns einfach geht =).

    Bin halt noch n Anfänger.


Log in to reply