Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo obtiene VC el nombre de la variable correspondiente a través del ID de control?

¿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)

{

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.