AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / Gestión de lenguajes externos / Lenguaje C
  • Presentación
  • Implementación
  • 1. Incluyendo los archivos de la interfaz C de WINDEV
  • 2. Incluyendo las declaraciones HFSQL
  • Interfaz de C++ con WINDEV
  • 1. Declarar el contexto HFSQL y las memorias intermedias de trabajo de cada archivo:
  • 2. Herencia
  • 3. Constructor
  • 4. MAPA de las acciones del usuario en las ventanas
  • 5. Asociación entre un miembro de la clase y una ventana control
  • Usando HFSQL en C++
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Presentación
Este tercer método utiliza la herencia de clases para interconectar fácilmente una aplicación C++ y WINDEV. Este modo de programación se recomienda si ya tiene una arquitectura basada en clases (MFC por ejemplo) para sus proyectos de desarrollo.
Las clases base provistas de esta interfaz utilizan las funciones descritas en el 2º método de la Background. Para obtener más información, consulte Detalles de los comandos para la interfaz externa
Este modo se ilustra en:
  • el proyecto VC60API.dsp (formato Visual C++ 6), disponible en el subdirectorio "External Languages\ES\C" del directorio de instalación de WINDEV.
  • el proyecto BC50API.ide (formato Borland C 5), disponible en el subdirectorio "External Languages\ES\C" del directorio de instalación de WINDEV.
Observación: Otros modos están disponibles para la programación en lenguaje externo. Para obtener más información, consulte Los modos de programación de los lenguajes externos
Implementación

1. Incluyendo los archivos de la interfaz C de WINDEV

Los siguientes archivos deben ser incluidos en un proyecto que llame a esta interfaz. Esta lista presenta el ejemplo VC60Api.dsp proporcionado con WINDEV. El archivo llamado "WD External Language.h" es específico de este proyecto y no debe ser incluido en su propio proyecto.
Las dos líneas siguientes deben encontrarse en el código del archivo principal.c de su proyecto C:
#include "WDWDial.h" // WINDEV language and objects
#include "HFContext.h" // HFSQL database

2. Incluyendo las declaraciones HFSQL

Se debe agregar una inclusión (#include) por cada archivo de datos declarado en el análisis del proyecto WINDEV. Las declaraciones de los ficheros de datos se incluyen en el fichero cuya extension es.h (este fichero sustituye al.wdr creado con la versión anterior de WINDEV).
Por ejemplo, en el proyecto Vc60.dsp (proporcionado con WINDEV en el directorio "ExternalLanguages"), se utiliza la siguiente Line para gestionar los ficheros City y State:
#include "WD External language.h"
Interfaz de C++ con WINDEV

1. Declarar el contexto HFSQL y las memorias intermedias de trabajo de cada archivo:

Si la aplicación debe gestionar ficheros de datos, se debe declarar un contexto de trabajo HFSQL así como un buffer para cada fichero de datos.
Estas declaraciones se realizan en el proyecto Vc60API.dsp mediante las siguientes líneas:
CHFContext    gclHF; // Manage the HFSQL context
StCITY       gstCity; // HF buffer of City file
StSTATE gstState;       // HF buffer of State file

2. Herencia

El uso de las ventanas WINDEV desde el lenguaje C++ se realiza por herencia de la clase CWDDialog. La clase que hereda de CWDDialog interactuará automáticamente con el objeto gráfico de la ventana y los controles encontrados en esta ventana.. En la mayoría de los casos, se utiliza una clase por tipo de ventana WINDEV.
Ejemplo de herencia:
class CMenu:public CWDDialog
{
...
}

3. Constructor

El constructor de la clase CWDDialog toma dos parámetros como se indica a continuación:
CWDDialog::CWDDialog(LPCSTR szNameWDW, HWND hWndParent)
Por lo tanto, el constructor de su clase debe pasar estos parámetros a CWDDialog cuando se le llama. Veamos el código del constructor de la clase CMenu que se encuentra en el ejemplo VC60API.dsp:
CMenu::CMenu(LPCSTR szNameWDW, HWND hWndParent): CWDDialog (szNameWDW,hWndParent)
{
}
El constructor de la clase puede recibir parámetros adicionales. Vea el constructor de la clase CSearch en el proyecto VC60API.dsp.

4. MAPA de las acciones del usuario en las ventanas

El mecanismo de la clase CWDDialog se utiliza para asociar los eventos del usuario en la ventana WINDEV con los métodos de su clase (como nWDSetCallbackSiguiente), pero de forma automatic.
Esto le permite incluir la gestión completa de la ventana dentro de su clase.. Para ello:
  • crear los métodos correspondientes a los diferentes procesos que deben realizarse en su ventana
  • declare el MAP (asociación método<->evento)
  • recuperar (si es necesario) las acciones base soportadas por la clase CWDDialog (opcional)
Creando los métodos
Los métodos de su clase serán llamados automáticamente por el mecanismo interno de la clase heredada de CWDDialog. Por lo tanto, se pueden encapsular con el modo 'protected' en su declaración.
Ejemplo de la clase CMenu:
class CMenu:public CWDDialog
{
public:
CMenu(LPCSTR pszNameWDW, HWND hWndParent= NULL);
protected:
void Exit( void ) {Close();}
void FindCity( void );
void FindState( void );
void LstState( void );
void LstPrint( void );
void LstConfig( void );
void Find( void );
...
}
Declarando el mapa
La siguiente declaración se utiliza para asociar los métodos creados con los eventos de usuario. Los eventos corresponden, como en el método anterior, al contenido de la cadena WDKey rellenada en el código WLanguage.
La primera declaración a hacer en la declaración de la clase window (después de la declaración de métodos) es la siguiente:
DECLARE_KEY_MAP(CMenu);
A continuación, basta con rellenar el MAPA con las asociaciones método&lt:-Event del siguiente modo (fuera de la declaración de la clase). Ejemplo tomado del proyecto VC60API.dsp:
START_KEY_MAP(CMenu)
{"FE", Exit},
{"RN", FindCity},
{"RD", FindState},
{"DD", LstState},
{"DI", LstPrint},
{"DC", LstConfig},
END_KEY_MAP()
Recuperando las acciones base soportadas por CWDDialog
La clase CWDDialog tiene en cuenta las teclas Enter y Esc (comportamiento estándar para la validación y cancelación). Para recuperar estos eventos, puede heredar del mecanismo descrito en la clase base por la siguiente Line (que se encuentra al final de sus declaraciones de métodos): HERIT_KEY_MAP(CWDDialog)
Código de declaración completa de la clase CMenu:
class CMenu:public CWDDialog
{
public:
CMenu(LPCSTR pszNameWDW, HWND hWndParent= NULL);
protected:
void Exit( void ) {Close();}
void FindCity( void );
void FindState( void );
void LstState( void );
void LstPrint( void );
void LstConfig( void );
void Find( void );
DECLARE_KEY_MAP(CMenu);
INHERIT_KEY_MAP(CWDDialog); // Optional
};
START_KEY_MAP(CMenu)
{"FE", Exit},
{"RN", FindCity},
{"RD", FindState},
{"DD", LstState},
{"DI", LstPrint},
{"DC", LstConfig},
END_KEY_MAP()

5. Asociación entre un miembro de la clase y una ventana control

Este tipo de asociación permite vincular a un miembro de la clase con un control de la ventana gestionada por la clase. Esto puede funcionar:
  • para recuperar automáticamente en un miembro el contenido de la control al validar (y salir) de la ventana
  • para asignar automáticamente el contenido de un miembro en un control al abrir la ventana
Una asociación de este tipo se realiza mediante la llamada a tres macrocomandos utilizados para ello:
  • crear el miembro de la clase que será relacionado a la control
  • inicializar la gestión de las asociaciones control/miembros
  • asociar la ventana control con el miembro del mismo nombre
La creación del miembro se realiza mediante la llamada a uno de los macrocomandos de la familia "DECLARE_MEMBER_INPUT_".. Por ejemplo, el macro comando DECLARE_MEMBER_INPUT crea un miembro entero que puede ser associated con un control entero.
Los macrocomandos "DECLARE_MEMBER_INPUT" se utilizan para declarar un miembro cuyo nombre corresponderá al nombre de la control en la ventana. El siguiente ejemplo se extrae de la declaración de la clase CSearch:
DECLARE_MEMBER_INPUT_INT(Occur,0) // Integer control whose value = 0
Un macro-comando está disponible para cada tipo de control (INT significa entero). Su lista es la siguiente (para más detalles, véase el archivo WDWDIAL.H):
// PICKER
DECLARE_MEMBER_RADIOBUTTON(NAME, INITVAL)
// LIBELLE
DECLARE_MEMBER_STATIC(NAME, INITSTR, SIZE)
// STRING EDIT
DECLARE_MEMBER_EDIT_STR(NAME, INITSTR, SIZE)
// CSTRING STRING EDIT without size limit
DECLARE_MEMBER_EDIT_CSTRING(NAME, INITSTR)
// INTEGER EDIT
DECLARE_MEMBER_EDIT_INT(NAME, INITVAL)
// MULTIPLE CHECK BOX
// Example:
//  DECLARE_MEMBER_TABCHECKBOX(CBOX1, 10, "x x x x x ")
// set of 10 check boxes initialized so that every other one is checked
DECLARE_MEMBER_ARRCHECKBOX(NAMEWDCONTROL, NUMBER, INITSTR)
// SIMPLE CHECK BOX
DECLARE_MEMBER_CHECKBOX(NAME, INITSTATE)
// STRING COMBO BOX
DECLARE_MEMBER_COMBO_STR(NAME, INITSTR, SIZE)
// STRING LIST BOX
DECLARE_MEMBER_LIST_STR(NAME, INITSTR, SIZE)
// CTString STRING COMBO BOX without size limit
DECLARE_MEMBER_COMBO_CSTRING(NAME, INITSTR)
// INTEGER COMBO BOX
DECLARE_MEMBER_COMBO_INT(NAME, INITVAL)
La gestión de los controles/miembros se inicializa mediante la macro "DECLARE_MANAGE_AUTO".. Ejemplo para la clase CSearch:
DECLARE_MANAGE_AUTO(CFind)
Por último, la asociación entre los controles de ventana y los miembros de la clase con el mismo nombre se realiza mediante los siguientes macrocomandos (ejemplo de la clase CFind):
START_MANAGE_AUTO(CFind)
MANAGE_AUTO(Occur)
// place the other control/member associations here
END_MANAGE_AUTO()
Usando HFSQL en C++
Las funciones de acceso a los ficheros de datos pueden utilizarse llamando a nWDExecute (véase la Definition de esta función). Sin embargo, la interfaz C++ proporciona una clase de gestión de archivos HFSQL denominada CVHFContext.
Esta clase interconecta el uso de funciones HFSQL estándar (funciones del lenguaje WL de H*).
Para más detalles, consulte la ayuda en línea de WINDEV (WDLang.chm) y el archivo HFContext.cpp suministrado con el proyecto VC60API.dsp
Versión mínima requerida
  • Versión 9
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 23/11/2023

Señalar un error o enviar una sugerencia | Ayuda local