Windows Guia de Plataforma

El backend de Windows usa la API nativa Win32 y GDI/GDI+ para todo el dibujo. Esta escrito en C++ y compilado con MSVC o BCC. Este es el backend mas maduro y completo en HarbourBuilder.

Estadisticas del Backend
LenguajeC++
Lineas de codigo~7,100
Funciones HB_FUNC~135
API NativaWin32 API (CreateWindowEx, GDI)
Scintilla5.6.1 (DLL dinamica)
SO SoportadoWindows 10, Windows 11

Vision General de la Arquitectura

Cada ventana y control de HarbourBuilder es una ventana Win32 nativa creada mediante CreateWindowEx(). El backend registra clases de ventana personalizadas al inicio. Los controles son controles comunes Win32 estandar: BUTTON, EDIT, STATIC, COMBOBOX, LISTBOX, msctls_progress32, msctls_trackbar32, SysTreeView32, SysListView32 y RichEdit.

Manejo de Eventos (WndProc)

El backend de Windows usa un WndProc central (procedimiento de ventana) que recibe todos los mensajes del SO. Los despacha a los manejadores de eventos de Harbour:

// win32_backend.cpp - Despacho de mensajes
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
   switch( msg )
   {
      case WM_COMMAND:
         FireEvent( hWnd, EVENT_CLICK, CT_BUTTON );
         break;
      case WM_LBUTTONDOWN:
         FireEvent( hWnd, EVENT_MOUSEDOWN );
         break;
      case WM_KEYDOWN:
         FireEvent( hWnd, EVENT_KEYDOWN, (int) wParam );
         break;
      case WM_PAINT:
         FireEvent( hWnd, EVENT_PAINT );
         break;
      case WM_CLOSE:
         if( !FireCloseQuery( hWnd ) )
            return 0;  // Cancelar cierre
         break;
   }
   return DefWindowProc( hWnd, msg, wParam, lParam );
}

Soporte de Modo Oscuro

HarbourBuilder en Windows sigue el tema del sistema. El modo oscuro se implementa usando:

Deteccion del tema del sistema

HarbourBuilder lee la configuracion del tema de Windows desde el registro (HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme) al inicio y configura todos los controles en consecuencia.

Integracion de Scintilla

El backend de Windows usa Scintilla 5.6.1 como biblioteca dinamica:

ArchivoUbicacionProposito
Scintilla.dllbin/Componente principal de edicion Scintilla
Lexilla.dllbin/Biblioteca de lexer (resaltado de sintaxis)

Scintilla se carga en tiempo de ejecucion mediante LoadLibrary() y GetProcAddress().

Opciones del Compilador

Compiladores Soportados

CompiladorVersionNotas
MSVC 202219.3xRecomendado. Soporte completo C++17, mejor optimizacion.
MSVC 201919.2xTotalmente soportado. Disponible via Visual Studio 2019 o Build Tools.
MSVC CommunityUltimaEdicion gratuita, compilador identico a Pro/Enterprise.
MSVC BuildToolsUltimaSolo linea de comandos. Bueno para pipelines CI/CD.
BCC7.7Embarcadero Borland C++ Compiler. Alternativa a MSVC.

Script de Construccion

El script build_win.bat maneja todo el proceso de construccion:

  1. Deteccion del compilador — Busca instalaciones de MSVC (2019, 2022, Community, BuildTools) y BCC.
  2. Configuracion del entorno — Llama a vcvarsall.bat para configurar el entorno del compilador.
  3. Compilacion de Harbour — Construye Harbour desde el codigo fuente si aun no esta presente.
  4. Construccion de Scintilla — Compila las DLLs de Scintilla y Lexilla.
  5. Compilacion del IDE — Compila el codigo fuente de HarbourBuilder.
  6. Enlazado — Enlaza contra user32.lib, gdi32.lib, comctl32.lib, dwmapi.lib y el runtime de Harbour.

Caracteristicas Especificas de la Plataforma

CaracteristicaImplementacion en Windows
Control Rich EditRichEdit20W / RichEdit50W (msftedit.dll)
Dialogos comunesGetOpenFileName(), GetSaveFileName(), ChooseFont(), ChooseColor()
Bandeja del sistemaShell_NotifyIcon() con NOTIFYICONDATA
Acceso al registroRegOpenKeyEx(), RegQueryValueEx()
Asociaciones de archivoBasado en registro bajo HKEY_CLASSES_ROOT
Arrastrar y soltarDragAcceptFiles() / WM_DROPFILES
PortapapelesOpenClipboard(), SetClipboardData()
ImpresionAPI Win32 Print (PrintDlg(), StartDoc())
Barras de titulo oscurasDwmSetWindowAttribute() con DWMWA_USE_IMMERSIVE_DARK_MODE

Limitaciones Conocidas

Dependencias

BibliotecaProposito
user32.libGestion de ventanas, mensajes, controles
gdi32.libDibujo, fuentes, mapas de bits
comctl32.libControles comunes (TreeView, ListView, ProgressBar, etc.)
comdlg32.libDialogos comunes (Abrir, Guardar, Fuente, Color)
dwmapi.libDesktop Window Manager (barras de titulo oscuras)
gdiplus.libGDI+ para graficos avanzados
ole32.libInicializacion COM, portapapeles
shell32.libFunciones del shell, arrastrar y soltar

En Esta Página

Primeros pasos Paleta de componentes Funciones del IDE Tutoriales Referencia Plataformas Vision General de la Arquitectura Manejo de Eventos (WndProc) Soporte de Modo Oscuro Integracion de Scintilla Opciones del Compilador Compiladores Soportados Script de Construccion Caracteristicas Especificas de la Plataforma Limitaciones Conocidas Dependencias