[C con Clase] Mostrar datos de MySql con Win Api

Salvador Pozo salvador en conclase.net
Mar Abr 3 22:52:57 CEST 2012


El pasado 2012-04-03 18:32:28, Robertti escribió:
 
R> Hola, 
R> tengo una duda que no se resolver. Resulta que tengo unos datos en una base de datos de MySql, y los puedo sacar y ver sin problemas en modo consola de C++ (estoy empezando con Dev-C++), pero soy incapaz de verlo con Windows Aplication... Sobre todo no se en que parte del código que envío abajo debo escribir los parámetros de conexión a la base de datos y cómo lo debo poner para que se imprima en pantalla...
R> Espero me podáis echar una mano.

Hola:

Yo, lo que suelo hacer en estos casos es crear una estructura como esta:

----8<------
struct DATOS {
    MYSQL *myData;
    HINSTANCE hInst;
};
----8<------

En esa estructura voy añadiendo campos para almacenar variables que necesitaré en toda la aplicación, como es el caso de la conexión con la base de datos.

Luego, en la función main creo una variable de tipo DATOS, que durante el programa puedo pasar a los procedimientos de ventana y de diálogo.

En el caso del procedimiento de ventana paso la dirección de la estructura en la llamada a CreateWindowEx, en el último parámetro:

----8<------
    DATOS datos;

    CreateWindowEx(
           0,                   /* Posibilidades de variación */
           "CLASE_NUESTRA",     /* Nombre de la clase */
           "Titulo",            /* Texto del título */
           WS_OVERLAPPEDWINDOW &
           ~WS_THICKFRAME &
           ~WS_MAXIMIZEBOX,     /* Tipo por defecto */
           CW_USEDEFAULT,       /* Windows decide la posición */
           CW_USEDEFAULT,       /* donde se coloca la ventana */
           504,                 /* Ancho */
           355,                 /* Alto en pixels */
           HWND_DESKTOP,        /* La ventana es hija del escritorio */
           NULL,                /* Sin menú */
           hThisInstance,       /* Manipulador de instancia */
           (void*)&datos        /* Datos de creación de ventana */
    );
----8<------

En el procedimiento de ventana podemos recuperar los datos, y asignarlo a una variable estática:

----8<------
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static DATOS* datos;
    PMYDLGDATA pMyDlgdata;

    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
           pMyDlgdata = (PMYDLGDATA)(((LPCREATESTRUCT) lParam)->lpCreateParams);
           datos = &pMyDlgdata->myData;
           break;
...
----8<------

Lo normal es abrir la conexión en main o al procesar WM_CREATE, y cerrarla al finalizar main o al procesar el mensae WM_DESTROY.

En los procedimientos de diálogo hacemos algo similar, pero pasamos el puntero en el lParam:

----8<------
              DialogBoxParam(GetModuleHandle(0), "Dialogo",
                             hwnd, DlgProcedure, (LPARAM)datos);
----8<------

Y en el procedimiento de diálogo lo recuperamos de una forma parecida:

----8<------
BOOL CALLBACK DlgProcedure(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static DATOS* datos;

    switch (msg)                  /* manipulador del mensaje */
    {
        case WM_INITDIALOG:
           datos = (DATOS *)lParam;
...
----8<------

Y eso es todo, a grandes rasgos.

Para cualquier aclaración, pregunta de nuevo. :)

Hasta pronto.

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


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