Como Usar um OCX em uma Aplicação de Console: Um Guia Passo a Passo

Usar controles ActiveX em aplicações de console pode parecer intimidador, especialmente se você é novo na programação ou na linguagem C++. Se você já se perguntou como adicionar um arquivo OCX à sua aplicação de console para alguns testes rápidos, você não está sozinho! Este post do blog o guiará pelo processo de fazer exatamente isso, facilitando e tornando-o eficiente.

Entendendo OCX e Seus Usos

Arquivos OCX são arquivos binários que contêm controles OLE (Object Linking and Embedding) reutilizáveis. Frequentemente usados para embutir funcionalidades como interfaces de usuário, eles podem ser muito úteis em várias aplicações, incluindo aplicações de console.

Começando com Visual C++

Assumindo que você já tem o Visual C++ instalado, aqui está uma maneira direta de testar controles OCX em sua aplicação de console.

Passo 1: Configurar Seu Ambiente

Certifique-se de ter o seguinte em ordem:

  • Visual C++ instalado (usaremos cl.exe para compilar).
  • Seu arquivo OCX (certifique-se de que ele esteja registrado em seu sistema).

Passo 2: Criar Sua Aplicação de Console

  1. Crie um novo arquivo de texto: Nomeie-o como test.cpp. Você escreverá seu código aqui.
  2. Abra-o em um editor de texto e copie o seguinte código:
#include "windows.h"
#include "shobjidl.h"
#include "atlbase.h"

//
// compile with:  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; // continue enumerating
}

void ShowTaskWindows(ITaskbarList* ptbl)
{
    if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl))
        throw "Unable to enum windows in 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 "Unable to create CLSID_TaskbarList";

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

        HideTaskWindows(ptbl);
        MessageBox(GetDesktopWindow(), _T("Confira a barra de tarefas!"), _T("StackOverflow FTW"), MB_OK);
        ShowTaskWindows(ptbl);
    }
    catch(TCHAR * msg) {
        MessageBox(GetDesktopWindow(), msg, _T("Erro"), MB_OK);
    }       

    CoUninitialize();
    return 0;
}

Passo 3: Compile Seu Código

Para compilar este código, abra seu prompt de comando de desenvolvedor e navegue até o diretório onde seu arquivo test.cpp está localizado. Use o seguinte comando:

cl.exe /EHsc test.cpp

Passo 4: Execute Sua Aplicação

Uma vez compilado, execute o executável resultante. Se tudo estiver configurado corretamente, você verá uma caixa de mensagem e alguma interação com a Barra de Tarefas do Windows.

Entendendo o Código

  • Inicialização do COM (CoInitialize): Antes de chamar qualquer função COM, você precisa inicializar o COM com CoInitialize().
  • Criando uma Instância: Neste código, CoCreateInstance() é usado para criar uma instância da classe TaskbarList. Este é o seu OCX.
  • Trabalhando com a Barra de Tarefas: As funções HideTaskWindows e ShowTaskWindows demonstram como manipular janelas na Barra de Tarefas.

Tratamento de Erros

O uso de declarações try-catch garante que quaisquer erros encontrados durante a execução do programa resultarão em uma caixa de mensagem com informações relevantes. Isso é crucial para a depuração.

Conclusão

Testar um OCX em uma aplicação de console não precisa ser uma batalha difícil. Com a configuração certa e entendimento dos componentes COM e ActiveX, você pode facilmente integrá-los em suas aplicações. Siga este guia passo a passo e você se sentirá seguro usando controles OCX rapidamente!

Se você encontrar algum problema, não hesite em entrar em contato ou consultar a documentação. Boa codificação!