Disculpe si esto es demasiado trivial, pero no entiendo cómo ingresar el valor numérico en el control de edición. Control de edición MFC representado por CEdit clase.cómo obtener el valor numérico del control de edición
Gracias.
Disculpe si esto es demasiado trivial, pero no entiendo cómo ingresar el valor numérico en el control de edición. Control de edición MFC representado por CEdit clase.cómo obtener el valor numérico del control de edición
Gracias.
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
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);
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.
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