Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Parameter Dialog: Komma anstatt Punkt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.03.2008, 10:25 Uhr
Gladi



Hallo Zusammen,

ich habe in meinem Programm ein CDialog integriert.
Es soll im Feld als Parameter eine float Zahl eingegeben werden.
Das Problem, es wird Punkt anstatt Komma akzeptiert, z. B. "0.03"
wie kann eine Gleitkommazahl entwieder mit komma oder Punkt angenommen werden?

Danke


C++:

----------------------------------------------------------.cpp

/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CKalibrierfaktor


CKalibrierfaktor::CKalibrierfaktor(CWnd* pParent)
    : CDialog(CKalibrierfaktor::IDD, pParent)
{
    //{{AFX_DATA_INIT(CKalibrierfaktor)
    m_fWert = 0.0f;
    //}}AFX_DATA_INIT
}


void CKalibrierfaktor::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CKalibrierfaktor)
    DDX_Text(pDX, IDC_txtFaktor, m_fWert);
    DDV_MinMaxFloat(pDX, m_fWert, 0.f, 100.f);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CKalibrierfaktor, CDialog)
    //{{AFX_MSG_MAP(CKalibrierfaktor)
        // HINWEIS: Der Klassen-Assistent fügt hier Zuordnungsmakros für Nachrichten ein
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

----------------------------------------------------------.h

class CKalibrierfaktor : public CDialog
{
// Konstruktion
public:
    CKalibrierfaktor(CWnd* pParent = NULL);   // Standardkonstruktor

// Dialogfelddaten
    //{{AFX_DATA(CKalibrierfaktor)
    enum { IDD = IDD_DLGFaktor };
    float    m_fWert;
    //}}AFX_DATA


// Überschreibungen
    // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
    //{{AFX_VIRTUAL(CKalibrierfaktor)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    //}}AFX_VIRTUAL

// Implementierung
protected:

    // Generierte Nachrichtenzuordnungsfunktionen
    //{{AFX_MSG(CKalibrierfaktor)
        // HINWEIS: Der Klassen-Assistent fügt hier Member-Funktionen ein
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.03.2008, 12:01 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
vielleicht gibts was fertiges, aber ich hab das früher immer so gemacht das ich bei onchange geprüft hab ob das format der eingegebenen zeichenkette i.o ist, das komma durch den punkt ersetzt habe und in die fliesskommavariable geschrieben habe
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.03.2008, 13:52 Uhr
Gladi



ich habe mich bei www.mikrocontroller.net registr. und die gleiche Frage getellt.
Ein netter Type hat mit Lösung geantwortet:


C++:
void C3dDDX_Text( CDataExchange* pDX, int nIdC, double& d, int Comma = 2 );

void C3dDDX_Text( CDataExchange* pDX, int nIdC, double& d, int Comma /* = 2 */ )
{
  CWnd*   pWnd = pDX->m_pDlgWnd->GetDlgItem( nIdC );
  CString str;

  pDX->PrepareEditCtrl( nIdC );

  ASSERT( pWnd );
  if( pDX->m_bSaveAndValidate ) {
    pWnd->GetWindowText( str );
    
    int n = str.Find( _T( "," ) );
    if( -1 < n ) {
      str.SetAt( n, '.' );
    }

    d = 0;
    _stscanf( str, _T( "%lf" ), &d );
  }

  else {
    TCHAR szBuf[64];
    _stprintf( szBuf, _T( "%-8.*lf" ), Comma, d );
    pWnd->SetWindowText( szBuf );
  }
}



Auf jeden Fall hat es funktioniert!
hat jemand eine bessere Lösung?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.03.2008, 14:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


joa das war es im grunde was ich auch vorgeschlagen habe, nur das es so über das DataExchange ne sauberere Lösung ist
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: