2012-05-07 8 views

Respuesta

8

CEdit deriva de CWnd, por lo que tiene una función miembro llamada GetWindowText que se puede llamar para obtener el texto en el CEdit, y luego convertir eso en tipo numérico, int o double - dependiendo de lo que se espera de usuario para entrar:

CString text; 
editControl.GetWindowText(text); 

//here text should contain the numeric value 
//all you need to do is to convert it into int/double/whatever 
16

además del método GetWindowText ya se ha mencionado, también se puede obligar a éste a través de DDX a un valor entero/entero sin signo/doble/flotador. Pruebe esto:

void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialog::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber); 
} 

mientras que m_iNumber es miembro de la clase CYourAwesomeDialog.

usted tiene que llamar

UpdateData(TRUE); 

el fin de escribir los valores de los controles en las variables. Llame a

UpdateData(FALSE); 

para hacerlo al revés - desde las variables en los controles.

EDITAR (Bonus):

Al releer mi respuesta, me di cuenta de que UpdateData (...) necesita una variable BOOL - corregido. Así que tuve una idea para las personas que les gusta la legibilidad. Porque siempre se confundió la que hizo la llamada que dirección, se podría introducir una enumeración para que sea más fácil de leer, al igual que (tal vez en stdafx.hy o alguna cabecera central):

enum UpdateDataDirection 
{ 
    FromVariablesToControls = FALSE, 
    FromControlsToVariables = TRUE 
} 

y que sólo tendría que escribir :

UpdateData(FromVariablesToControls); 

o

UpdateData(FromControlsToVariables); 
1

Si usted va a necesitar que la funcionalidad regularmente, digamos en varios cuadros de diálogo, a continuación, es posible que así subclase su propia clase CEdit derivados para hacer el conseguir, trabajo de configuración y validación

class CFloatEdit : public CEdit 
{ 
public: 
    CFloatEdit(); 
    void SetValue(double v) { 
     // format v into a string and pass to SetWindowText 
     } 
    double GetValue() { 
     // validate and then return atoi of GetWindowText 
     } 
    void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { 
     // only allow digits, period and backspace 
     } 
}; 

Algo así, asegúrese de que el mapa de mensajes pase junto con todos los demás mensajes al CEdit padre. Puede ampliarlo para que tenga una configuración personalizable de límite inferior y superior y decimales.

+0

Usaría DDV para el trabajo de validación, pero puede pasar un puntero a este control para resaltar los errores de validación – CppChris

Cuestiones relacionadas