Hilfe bei Radiobuttons

destoval

Grünschnabel
Hallo zusammen,

mein erster Beitrag hier, hoffe es werden noch viele folgen.

mein Problem:

Ich habe eine Radiobutton Gruppe, 3 Buttons in der Gruppe.

Erstens:
Nun möchte ich das bei der Initiaisierung des Progs der erste RadioButton der Gruppe selektiert wird.
Ich weiß das man das bei dem Dialog OnInit eintragen muss, weiß allerdings nicht was ich eintragen soll!

Zweitens:
Wie kann ich Prüfen welcher RadioButton überhaupt selektiert ist!
Ich habe einen normalen Button auf den ich klicke. je nachdem welcher RadioButton aktiviert ist, wird dann eine Unterschiedliche Rechnung durchgeführt.
Ich muss also wissen ob Button 1,2 oder 3 aktiviert ist, wie mache ich das?

3.
Wie kann ich eine float zahl auf zwei stellen hinter dem Komma kürzen?
nicht bei der Berechnung sondern später bei der Ausgabe in einem Eingabefeld.
Wenn ich da noch ein Euro Zeichen(€) hineinbekomme wäre das auch net schlecht!


SInd warscheinlich dumme fragen, gegoogelt hab ich schon genug!
SRY

mfg DestovaL
 
Punkt 1 und 2 dürfte mit dem folgenden Codebeispiel hinreichend erklärt sein:
C++:
// Radiobutton selektieren
// ID_FIRST_RADIO ... ID des ersten Radiobuttons der Gruppe
// ID_LAST_RADIO  ... ID des letzten Radiobuttons der Gruppe
// ID_CHECK_RADIO ... ID des Radiobuttons, der selektiert werden soll
CheckRadioButton(ID_FIRST_RADIO, ID_LAST_RADIO, ID_CHECK_RADIO);

// Selektierten Radiobutton ermitteln
int nCheckedID = GetCheckedRadioButton(ID_FIRST_RADIO, ID_LAST_RADIO);
Bei Punkt 3 kann man den Wert vor der Ausgabe im Textfeld entsprechend formatieren. Ich bin mir allerdings nicht sicher, ob der Ausgabewert korrekt gerundet oder nur einfach abgeschnitten wird. Ggf. muss vorher eine Berechnung zur richtigen Rundung ausgeführt werden.
C++:
float f = 5.1234;

CString str;
str.Format(_T("%.2f EUR"), f); // EUR durch das Euro-Zeichen ersetzen

SetDlgItemText(ID_EDIT_FELD, str);  // ID_EDIT_FELD ... ID des Ausgabefeldes
Gruß
MCoder
 
hi Mcoder,

danke erstmal für die antworten!

die Radibutton sachen funktionieren einwandfrei! thx

die float konvertierung allerdings nicht!
du sagtest das man das auch im menü irgendwo einstellen kann wieviele nachkommastellen angezeigt werden sollen!
wo denn? :rtfm:
das die zahlen dann nur abgeschnitten werden, wäre nicht schlimm!

und noch ne frage: wie kann ich ein Eingabefeld auf Readonly stellen?


mfg DestovaL
 
destoval hat gesagt.:
die float konvertierung allerdings nicht!
Was genau funktioniert denn nicht? Mit einem Menü hatte ich nichts geschrieben :confused:

Die Readonly-Eigenschaft kann man im Dialog-Designer setzen. Bei den Eigenschaften zum Textfeld gibt es eine entsprechende Option zum anwählen.

Gruß
MCoder
 
MCoder hat gesagt.:
Was genau funktioniert denn nicht?

es passiert einfach nix! keine fehler beim kompilieren, in der ausgabe hat sich trotzdem nix geändert!
da muss nix gerundet werden, und auch kein euro zeichen enthalten sein!
wenn einfach nur 2 stellen nach dem komma zu sehen sind, reicht mir das völlig!

MCoder hat gesagt.:
Die Readonly-Eigenschaft kann man im Dialog-Designer setzen. Bei den Eigenschaften zum Textfeld gibt es eine entsprechende Option zum anwählen.

Ja, aber dann wird der Hintergrund des Feldes Grau!
sieht total daneben aus!
kann man diehintergrundfarben von solchen Feldern eigentlich ändern?

MCoder hat gesagt.:
Mit einem Menü hatte ich nichts geschrieben
MCoder hat gesagt.:
Bei Punkt 3 kann man den Wert vor der Ausgabe im Textfeld entsprechend formatieren. Ich bin mir allerdings nicht sicher, ob der Ausgabewert korrekt gerundet oder nur einfach abgeschnitten wird.

hab das so verstanden das man das im einem menü irgendwo einstellen kann :rolleyes:
da muss nix gerundet werden, und auch kein euro zeichen enthalten sein!
wenn einfach nur 2 stellen nach dem komma zu sehen sind, reicht mir das völlig!


mfg DestovaL
 
Hallo,

ich verstehe nicht ganz, was du gemacht hast. Das Formatieren des Ausgabestrings sollte schon funktionieren.
Mit str.Format(_T("%.2f EUR"), f); wird ein auf 2 Nachkommastellen beschränkter String vom Float-Wertes erzeugt und mit SetDlgItemText(ID_EDIT_FELD, str); wird er in das Textfeld geschrieben.
Vielleicht zeigst du mal die Codestelle, an der du den Float-Wert ins Textfeld bringst.

Um die Hintergrundfarben des Textfeldes zu ändern, muss du mit dem Klassenassistenten einen Nachrichten-Handler für WM_CTLCOLOR hinzufügen. Der nachfolgende Code zeigt, was alles zu tun ist.
C++:
// in .h der Dialogklasse deklarieren
CBrush m_brushBg;

// im Konstruktor der Dialogklasse initialisieren (Farbe: weiss)
m_brushBg.CreateSolidBrush(RGB(255,255,255));

// und so schaut der Nachrichten-Handler für WM_CTLCOLOR aus
HBRUSH CMyDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    if( pWnd->GetDlgCtrlID() == ID_EDIT_FELD )
    {
        pDC->SetBkColor(RGB(255,255,255));
        return (HBRUSH)m_brushBg.GetSafeHandle();
    }

    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Gruß
MCoder
 
Zurück