¿Cómo obtiene VC el nombre de la variable correspondiente a través del ID de control?
No es posible obtener una variable de control (de ningún tipo) por el ID del control.
Existe una asociación "débil" entre las variables de control y las ventanas de control (incluidos punteros, identificadores e ID) y no existe una integración real. Sin embargo, la asociación entre ellas se logra a través de DoDataExchange El proceso específico. es el siguiente:
La inicialización de la interfaz de diálogo y los cambios de la interfaz llamarán a UpdateDataExchange. Cuando ocurre un cambio, se llamará a la función UpdateData, y esta función llamará a DoDataExchange. Desde la función miembro DoDataExchange de cada cuadro de diálogo, podemos ver que solo aquí se puede lograr la asociación entre controles y variables. siguiente:
DDX_Control(pDX,?IDC_BUTTON2,?BUTTON2,?m_bn2);
DDX_Radio(pDX,?IDC_RADIO1,?m_radio);
Esta asociación Se implementa a través de una serie de funciones API DDX_, entonces, ¿qué se hace aquí? Puede ver la implementación en el código fuente de MFC: void?AFXAPI?DDX_Text(CDataExchange*?pDX, ?int?nIDC, ?LPTSTR?value, int?nMaxLen)
{
ASSERT(nMaxLen!=?0);
HWND?hWndCtrl?=?pDX-gt; PrepareEditCtrl(nIDC);
if?(pDX-gt;m_bSaveAndValidate) p >
{
int?nLen?=?::GetWindowTextLength(hWndCtrl);
int?nRetrieved?=?::GetWindowText(hWndCtrl,?value,?nMaxLen ) ;
if(nLen?gt;?nRetrieved)
TRACE1("¿Texto?en?control?ID?d?es?demasiado largo.?Llamada?DDV_MaxChars()! \ n",?nIDC);
}
else
{
AfxSetWindowText(hWndCtrl,?value);
}
}
Se puede ver desde aquí que las variables y la ventana de control están directamente relacionadas, no directamente relacionadas, pero las operaciones de asignación y recuperación se realizan en su totalidad. a través de la función A, por lo que la variable no se puede obtener mediante ID de control o puntero.