[C con Clase] Parámetro lParam en un DialogBoxParam

Salvador Pozo salvador en conclase.net
Lun Nov 30 15:15:06 CET 2009


El pasado 2009-11-30 13:40:23, Juan Pedro Mermoz escribió:
 
JPM> Hola! Tengo el sig problema enviando como parámetro una variable.
JPM> La variable que estoy enviando es "id" y es un entero, se envia desde el main de la sig forma:
JPM> DialogBoxParam(GetModuleHandle(NULL), "MODIFICARCONTACTO", hDlg, DlgProcModificar, (LPARAM) id);

Hola:

El valor del parámetro lParam sólo se envía al procedimiento de diálogo cuando se crea, es decir, junto al mensaje WM_INITDIALOG. Con el resto de los mensajes, el valor del parámetro tiene otros significados (o no se usa), y por lo tanto, no lo puedes usar del mismo modo.

La solución es relativamente simple. Puedes crear una variable estática e inicializarla cuando proceses el mensaje WM_INITDIALOG.

Debe ser estática, ya que el mismo prodedimiento de diálogo es invocado para todos los diálogos de la misma clase, y cualquier variable local cambiará de valor entre diferentes procesos de distintos mensajes.

Por ejemplo:

BOOL CALLBACK DlgProcModificar(HWND hDlg, UINT mensaje, WPARAM wParam, LPARAM id)
{
    static int st_id;

    switch (mensaje)
    {
        case WM_INITDIALOG:
          st_id = (int)id;
          return TRUE;
        case WM_COMMAND:
...
     return FALSE;
}

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase