CSpinCtrlButton mittels GetAccel eigene gültige Werte zuweisen

Cappaja

Erfahrenes Mitglied
hallo,

ich habe ein CEdit Feld mit einem CSpinCtrl Element verbunden um ganzzahlige Werte inkrementieren bzw. dekrementieren zu können. Ich möchte jetzt aber das 12 mögliche Zahlenwerte nach folgendem Muster zur Verfügung stehen:
Code:
double GainTab[] = { 0.01,  0.02,  0.05,
				        0.1 ,  0.2 ,  0.5 ,
                                           1  ,  2   ,  5   ,
                                        10   , 20   , 50  };

Ich habe hierfür die Methode Set bzw. GetAccel( int nAccel, UDACCEL* pAccel ) gefunden. Aus der MSDN werde ich hierbei nicht wirklich schlau nAccel stellt angeblich die Anzahl der UDACCEL structs dar. ich habe mir das struct angesehen und frage mich was ich da mit der zeit anfangen soll.

kann mir jemand sagen wie ich meine vorliegende Tabelle an ein CSpinCtrlButton übergeben kann, sodass nur diese Werte zur Auswahl stehen?

Mein bisheriger Code für diese Funktion:
Code:
void CDisplayControl::OnChangeScale() 
{
	double GainTab[] = { 0.01,  0.02,  0.05,
						 0.1 ,  0.2 ,  0.5 ,
                         1   ,  2   ,  5   ,
                        10   , 20   , 50  };

	int NewValue = ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_SCALE))->GetPos();

	if(NewValue < 0)
	{
		NewValue = 0;
	}
	if(NewValue > 11)
	{
		NewValue = 11;
	}

       // Hier sollte das GainTab Array auf das Kontrollelement übergeben werden.

	((CWiwoDlg*)AfxGetMainWnd())->pDP.d_fac = GainTab[NewValue];
}

wenn ich es über die Membervariable vom CSpinCtrlButton versuche steigt er mir bei SetWindowText() aus
Code:
double n = GainTab[NewValue];
CString s;
s.Format("%.2lf", n);
m_ctrlScale.SetWindowText(s);
 
Zuletzt bearbeitet:

MCoder

Erfahrenes Mitglied
Hallo,

Wenn du nur diese begrenzte Anzahl von Werten hast, die sich nicht fortlaufend inkrementieren/dekrementieren lassen, würde ich statt des SpinButtonControl lieber eine ComboBox verwenden.

Gruß
MCoder
 

Cappaja

Erfahrenes Mitglied
hi MCoder,

eine Combobox wäre mit AddString() sicher einfacher zu handhaben, jedoch ist ein drehfeld an dieser stelle anwender freundlicher, da es sich bei den um eine zehnerpotenz höheren werten um skalierungsgrößen handelt, so kann der anwender durch mehrmaliges inkrementieren schneller zu seiner gewünschten ansicht des grpahen gelangen. bei einer combobox müsste ich jedes mal den pfeil anklicken und dann eine auswahl treffen, das ist bei mehrmaligem "probieren" etwas lästig.
vielleicht geht es ja doch irgendwie über die drehfelder...
 

MCoder

Erfahrenes Mitglied
Ich denke nicht, dass sich das mit dem CSpinButtonCtrl realisieren lässt. Evt. wäre eine eigene Lösung mit zwei Buttons und einem Textfeld einfacher zu bewerkstelligen.

Gruß
MCoder