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

Juan Pedro Mermoz jpmermoz en hotmail.com
Lun Nov 30 16:55:47 CET 2009


Hola! Probé lo que me dijiste, pero al querer usar la nueva variable estática también muestra otro valor dentro del WM_COMMAND, pero dentro de WM_INITDIALOG funciona bien. Acá está el codigo:

#include <windows.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include "funciones.h"

BOOL CALLBACK DlgProcModificar(HWND hDlg, UINT mensaje, WPARAM wParam, LPARAM id)
{
	char consulta[512];
	Contacto contacto;
	static int st_id;
	
	switch (mensaje)
	{
		case WM_INITDIALOG:
			st_id = (int)id;
			sprintf (consulta, "select *from contactos where id = '%s'", st_id);
			mysql_query(BD, consulta);
			if ((res = mysql_store_result(BD)))
			{
				while ((row = mysql_fetch_row(res)) != NULL)
				{
					SetWindowText(GetDlgItem(hDlg, ID_EDITNOMBRE), row[1]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITAPELLIDO), row[2]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITTEL), row[3]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITCEL), row[4]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITMAIL), row[5]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITDIRECCION), row[6]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITLOCALIDAD), row[7]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITPROVINCIA), row[8]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITPAIS), row[9]);
					SetWindowText(GetDlgItem(hDlg, ID_EDITCUMPLEANOS), row[10]);
				}
			}
			mysql_free_result(res);
			return TRUE;
	
		case WM_COMMAND:
			switch (LOWORD(wParam))
			{
				case ID_MODIFICAR:
					GetDlgItemText (hDlg, ID_EDITNOMBRE, contacto.nombre, 30);
					GetDlgItemText (hDlg, ID_EDITAPELLIDO, contacto.apellido, 30);
					GetDlgItemText (hDlg, ID_EDITTEL, contacto.tel, 15);
					GetDlgItemText (hDlg, ID_EDITCEL, contacto.cel, 15);
					GetDlgItemText (hDlg, ID_EDITMAIL, contacto.mail, 40);
					GetDlgItemText (hDlg, ID_EDITDIRECCION, contacto.direccion, 50);
					GetDlgItemText (hDlg, ID_EDITLOCALIDAD, contacto.localidad, 30);
					GetDlgItemText (hDlg, ID_EDITPROVINCIA, contacto.provincia, 30);
					GetDlgItemText (hDlg, ID_EDITPAIS, contacto.pais, 30);
					GetDlgItemText (hDlg, ID_EDITCUMPLEANOS, contacto.cumpleanos, 20);
					sprintf (consulta, "update contactos set nombre = '%s', apellido = '%s', tel = '%s', cel = '%s', mail = '%s', direccion = '%s', localidad = '%s', provincia = '%s', pais = '%s', cumpleanos = '%s' where id = '%s'", contacto.nombre, contacto.apellido, contacto.tel, contacto.cel, contacto.mail, contacto.direccion, contacto.localidad, contacto.provincia, contacto.pais, contacto.cumpleanos, st_id);
					mysql_query (BD, consulta);
					EndDialog (hDlg, FALSE);
					break;
			}
			return TRUE;
			
		case WM_CLOSE:
			EndDialog(hDlg, FALSE);
			break;
	}
	return FALSE;
}

Dentro del WM_INITDIALOG, la variable st_id si tiene el valor correcto, pero dentro de WM_COMMAND muestra otra cosa totalmente distinta. Lo que yo quiero es poder modificar un contacto de mi base de datos de acuerdo al id del mismo.
Muchas gracias, saludos!


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