Estimado Miguel Angel,
Botones con modo flat (include/fivewin.ch):
TButtonBmp (source/classes/buttonb.prg:21,131) — BUTTONBMP nativo (BUTTON + BS_FLAT=0x8000):
@ r,c BUTTONBMP ... FLAT
Lo pinta Windows, respeta el theme si hay manifest.
TBtnBmp (source/classes/btnbmp.prg:143,324,397) — BTNBMP owner-draw, lFlatStyle:
@ r,c BTNBMP ... FLAT // sin WS_BORDER, sin borde 3D
Lo pinta FWH. NOBORDER es similar pero no idéntico.
TBtnFlat (source/classes/btnflat.prg:17) — FLATBTN, plano por definición:
@ r,c FLATBTN ... [NOBORDER] COLOR nTxt,nPane
En barra: DEFINE BUTTON ... FLAT/NOBORDER (fivewin.ch:302).
TButton (BUTTON nativo, fivewin.ch:473) no tiene cláusula FLAT; solo STYLE nStyle (podrÃas pasar 0x8000 a mano).
Quién toma el theme activo de Windows:
Condición: exe con manifest comctl32 v6 + tema activo → IsAppThemed() = C5_IsAppThemed() .and. C5_IsThemeActive() (source/function/c5lib.prg:491, source/internal/themes.c:134).
Automáticos (controles nativos, los pinta el SO): TButton, TButtonBmp, TCheckBox (checkbox.prg:214), TRadio (radio.prg:191), TGroup (group.prg:250), TComboBox, TGet/TMGet, TSay, THeader, TTrackBar, TFolder/TPages (DrawThemed), TToolBar/ReBar, TTreeView, etc. Ver adaptaciones en control.prg:557,592.
Excepción owner-draw: TBtnBmp se autopinta e ignora el theme, salvo activarlo explÃcito (btnbmp.prg:154,296,2244):
oBtn:SetThemed( .T. ) // usa OpenThemeData("BUTTON")+DrawThemeBackground(BP_PUSHBUTTON)
// por defecto global: TBtnBmp():lDefaultTheme := .T.
Requiere compilado con #define THEME (btnbmp.prg:3).
- TBtnFlat, TBar, TXBrowse, TDialog:SetDarkTheme() usan colores propios; para dark-mode se desactiva el theme con SetWindowTheme(o:hWnd,"","") (dialog.prg:1411).