Cómo usar un OCX en una aplicación de consola: una guía paso a paso

Usar controles ActiveX en aplicaciones de consola puede parecer abrumador, especialmente si eres nuevo en la programación o en el lenguaje C++. Si te has preguntado cómo incluir un archivo OCX en tu aplicación de consola para realizar algunas pruebas rápidas, ¡no estás solo! Esta publicación del blog te guiará a través del proceso de hacerlo, haciéndolo fácil y eficiente.

Entendiendo OCX y sus usos

Los archivos OCX son archivos binarios que contienen controles OLE (Object Linking and Embedding) reutilizables. A menudo se utilizan para incrustar funcionalidades, como interfaces de usuario, y pueden ser muy útiles en diversas aplicaciones, incluidas las aplicaciones de consola.

Comenzando con Visual C++

Asumiendo que ya tienes Visual C++ instalado, aquí hay una forma sencilla de probar los controles OCX en tu aplicación de consola.

Paso 1: Configura tu entorno

Asegúrate de tener lo siguiente en su lugar:

  • Visual C++ instalado (usaremos cl.exe para compilar).
  • Tu archivo OCX (asegúrate de que esté registrado en tu sistema).

Paso 2: Crea tu aplicación de consola

  1. Crea un nuevo archivo de texto: Nómbralo test.cpp. Aquí escribirás tu código.
  2. Ábrelo en un editor de texto y copia el siguiente código:
#include "windows.h"
#include "shobjidl.h"
#include "atlbase.h"

//
// compilar con:  cl /EHsc test.cpp
//

BOOL CALLBACK RemoveFromTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->DeleteTab(hwnd);  
    return TRUE;
}

void HideTaskWindows(ITaskbarList* ptbl)
{
    EnumWindows(RemoveFromTaskbarProc, (LPARAM) ptbl);
}

BOOL CALLBACK AddToTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->AddTab(hwnd); 
    return TRUE; // continuar enumerando
}

void ShowTaskWindows(ITaskbarList* ptbl)
{
    if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl))
        throw "No se pudo enumerar las ventanas en ShowTaskWindows";
}

int main(int, char**)
{
    CoInitialize(0);

    try {
        CComPtr<IUnknown> pUnk;

        if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk)))
            throw "No se pudo crear CLSID_TaskbarList";

        CComQIPtr<ITaskbarList> ptbl = pUnk;
        if (ptbl)
            ptbl->HrInit();

        HideTaskWindows(ptbl);
        MessageBox(GetDesktopWindow(), _T("¡Mira la barra de tareas!"), _T("StackOverflow FTW"), MB_OK);
        ShowTaskWindows(ptbl);
    }
    catch(TCHAR * msg) {
        MessageBox(GetDesktopWindow(), msg, _T("Error"), MB_OK);
    }       

    CoUninitialize();
    return 0;
}

Paso 3: Compila tu código

Para compilar este código, abre tu símbolo del sistema para desarrolladores y navega al directorio donde se encuentra tu archivo test.cpp. Usa el siguiente comando:

cl.exe /EHsc test.cpp

Paso 4: Ejecuta tu aplicación

Una vez compilado, ejecuta el archivo ejecutable resultante. Si todo está configurado correctamente, deberías ver un cuadro de mensaje y alguna interacción con la barra de tareas de Windows.

Entendiendo el código

  • Inicialización de COM (CoInitialize): Antes de llamar a cualquier función de COM, necesitas inicializar COM con CoInitialize().
  • Creando una instancia: En este código, se utiliza CoCreateInstance() para crear una instancia de la clase TaskbarList. Este es tu OCX.
  • Trabajando con la barra de tareas: Las funciones HideTaskWindows y ShowTaskWindows demuestran cómo manipular las ventanas en la barra de tareas.

Manejo de errores

El uso de declaraciones try-catch asegura que cualquier error encontrado durante la ejecución del programa mostrará un cuadro de mensaje con información relevante. Esto es crucial para la depuración.

Conclusión

Probar un OCX en una aplicación de consola no tiene por qué ser una batalla cuesta arriba. Con la configuración adecuada y el entendimiento de los componentes COM y ActiveX, puedes integrarlos fácilmente en tus aplicaciones. Sigue esta guía paso a paso, y te sentirás seguro usando controles OCX en poco tiempo.

Si encuentras algún problema, no dudes en ponerte en contacto o consultar la documentación. ¡Feliz codificación!