WinComm/vbx/vbapi.h
2026-02-23 20:53:02 -06:00

266 lines
11 KiB
C

// vbapi.h - Reconstructed VBX CDK header
//
// Reconstructed from the published Visual Basic Custom Control (VBX)
// specification for use with MSVC 1.52 targeting 16-bit Visual Basic 4.
// Types, structures, constants, and API prototypes match the VBX CDK.
#ifndef VBAPI_H
#define VBAPI_H
#include <windows.h>
// -----------------------------------------------------------------------
// Packing: VBX CDK structures use byte packing
// -----------------------------------------------------------------------
#pragma pack(1)
// -----------------------------------------------------------------------
// Core types
// -----------------------------------------------------------------------
typedef WORD HCTL; // Handle to a VBX control instance
typedef WORD HSZ; // Handle to a VB-managed string
typedef LONG HLSTR; // Handle to a VB long string
typedef USHORT ERR; // Error code
// Segment type for MSVC 1.52
#ifndef _SEGMENT_DEFINED
typedef unsigned short _segment;
#define _SEGMENT_DEFINED
#endif
// Flag type
typedef DWORD FL;
// -----------------------------------------------------------------------
// Forward declarations and pointer types
// -----------------------------------------------------------------------
typedef struct tagMODEL MODEL;
typedef struct tagPROPINFO PROPINFO;
typedef struct tagEVENTINFO EVENTINFO;
typedef struct tagPARMINFO PARMINFO;
typedef MODEL FAR *LPMODEL;
typedef PROPINFO *PPROPINFO; // Near pointer (DLL data segment)
typedef EVENTINFO *PEVENTINFO; // Near pointer (DLL data segment)
typedef PARMINFO *PPARMINFO; // Near pointer (DLL data segment)
// -----------------------------------------------------------------------
// Control procedure type
// -----------------------------------------------------------------------
typedef LONG (FAR PASCAL *PCTLPROC)(HCTL, HWND, USHORT, USHORT, LONG);
// -----------------------------------------------------------------------
// VB version constants
// -----------------------------------------------------------------------
#define VB_VERSION 0x0300
#define VB300_VERSION 0x0300
// -----------------------------------------------------------------------
// Data types (bits 0-7 of PROPINFO.fl)
// -----------------------------------------------------------------------
#define DT_HSZ 0x01
#define DT_SHORT 0x02
#define DT_LONG 0x03
#define DT_BOOL 0x04
#define DT_COLOR 0x05
#define DT_ENUM 0x06
#define DT_REAL 0x07
#define DT_XPOS 0x08
#define DT_XSIZE 0x09
#define DT_YPOS 0x0A
#define DT_YSIZE 0x0B
#define DT_PICTURE 0x0C
#define DT_HLSTR 0x0D
// -----------------------------------------------------------------------
// Property flags (bits 8+ of PROPINFO.fl)
// -----------------------------------------------------------------------
#define PF_datatype 0x000000FFL // Mask for data type field
#define PF_fPropArray 0x00000100L
#define PF_fSetData 0x00000200L
#define PF_fSetMsg 0x00000400L
#define PF_fNoShow 0x00000800L
#define PF_fNoRuntimeW 0x00001000L
#define PF_fGetData 0x00002000L
#define PF_fGetMsg 0x00004000L
#define PF_fGetHszMsg 0x00008000L
#define PF_fUpdateOnEdit 0x00010000L
#define PF_fEditable 0x00020000L
#define PF_fPreHwnd 0x00040000L
#define PF_fDefVal 0x00080000L
#define PF_fNoInitDef 0x00100000L
#define PF_fNoRuntimeR 0x00200000L
#define PF_fSaveData 0x00400000L
#define PF_fSaveMsg 0x00800000L
#define PF_fLoadDataOnly 0x01000000L
#define PF_fLoadMsgOnly 0x02000000L
// -----------------------------------------------------------------------
// MODEL flags
// -----------------------------------------------------------------------
#define MODEL_fArrows 0x00000001L
#define MODEL_fFocusOk 0x00000002L
#define MODEL_fMnemonic 0x00000004L
#define MODEL_fDesInteract 0x00000008L
#define MODEL_fInitMsg 0x00000010L
#define MODEL_fLoadMsg 0x00000020L
#define MODEL_fInvisAtRun 0x00000040L
#define MODEL_fGraphical 0x00000080L
// -----------------------------------------------------------------------
// VBX control messages
// -----------------------------------------------------------------------
#define VBM__BASE (WM_USER + 0x0600)
#define VBM_INITIALIZE (VBM__BASE + 0)
#define VBM_SETPROPERTY (VBM__BASE + 1)
#define VBM_GETPROPERTY (VBM__BASE + 2)
#define VBM_CHECKPROPERTY (VBM__BASE + 3)
#define VBM_MNEMONIC (VBM__BASE + 4)
#define VBM_CREATED (VBM__BASE + 5)
#define VBM_LOADED (VBM__BASE + 6)
#define VBM_SAVEPROPERTY (VBM__BASE + 7)
#define VBM_LOADPROPERTY (VBM__BASE + 8)
#define VBM_METHOD (VBM__BASE + 9)
// -----------------------------------------------------------------------
// Error codes
// -----------------------------------------------------------------------
#define ERR_None 0
#define ERR_InvPropVal 380 // Invalid property value
#define ERR_InvPropSet 383 // Can't set property at this time
// -----------------------------------------------------------------------
// Standard property pointers
//
// Magic values recognized by VB as built-in properties.
// -----------------------------------------------------------------------
#define PPROPINFO_STD_CTLNAME ((PPROPINFO)0)
#define PPROPINFO_STD_INDEX ((PPROPINFO)1)
#define PPROPINFO_STD_HWND ((PPROPINFO)2)
#define PPROPINFO_STD_TAG ((PPROPINFO)5)
#define PPROPINFO_STD_LEFT ((PPROPINFO)6)
#define PPROPINFO_STD_TOP ((PPROPINFO)7)
#define PPROPINFO_STD_WIDTH ((PPROPINFO)8)
#define PPROPINFO_STD_HEIGHT ((PPROPINFO)9)
#define PPROPINFO_STD_ENABLED ((PPROPINFO)17)
#define PPROPINFO_STD_VISIBLE ((PPROPINFO)18)
#define PPROPINFO_STD_PARENT ((PPROPINFO)21)
#define PPROPINFO_STD_DRAGMODE ((PPROPINFO)22)
#define PPROPINFO_STD_DRAGICON ((PPROPINFO)23)
#define PPROPINFO_STD_NONE ((PPROPINFO)NULL)
// Aliases matching the plan's naming convention
#define PPROPINFO_STD_NAME PPROPINFO_STD_CTLNAME
// -----------------------------------------------------------------------
// PROPINFO - Property descriptor
// -----------------------------------------------------------------------
struct tagPROPINFO {
PSTR npszName; // Property name (near pointer, DLL DS)
FL fl; // Data type (bits 0-7) | Property flags (bits 8+)
BYTE offsetData; // Byte offset in control's cbCtlExtra data
BYTE infoData; // Type-specific info (e.g., max string length)
LONG dataDefault; // Default value
PSTR npszEnumList; // DT_ENUM: null-separated, double-null terminated
BYTE enumMax; // DT_ENUM: maximum valid value
};
// -----------------------------------------------------------------------
// PARMINFO - Event parameter descriptor
// -----------------------------------------------------------------------
struct tagPARMINFO {
PSTR npszName; // Parameter name
FL fl; // Data type
};
// -----------------------------------------------------------------------
// EVENTINFO - Event descriptor
// -----------------------------------------------------------------------
struct tagEVENTINFO {
PSTR npszName; // Event name
USHORT cParms; // Number of parameters
USHORT cwParms; // Size of parameters in words
PPARMINFO npParmInfo; // Parameter info array (NULL if no params)
PSTR npszParmProf; // Parameter profile string (e.g., "value As Integer")
FL fl; // Event flags
};
// -----------------------------------------------------------------------
// MODEL - Control model definition
//
// VB3+ version (usVersion = VB300_VERSION) for VB4 compatibility.
// Registered with VBRegisterModel() in VBINITCC.
// -----------------------------------------------------------------------
struct tagMODEL {
USHORT usVersion; // VB_VERSION (0x0300)
FL fl; // MODEL_* flags
PCTLPROC pctlproc; // Control procedure
USHORT fsClassStyle; // Window class style bits
USHORT flWndStyle; // Window style bits
USHORT cbCtlExtra; // Bytes of per-instance data
USHORT idBmpPalette; // Toolbox bitmap resource ID
PSTR npszDefCtlName; // Default control name (near)
PSTR npszClassName; // Window class name (NULL = default)
PSTR npszParentClassName; // Parent class name (NULL = default)
PPROPINFO *npproplist; // Property list (NULL-terminated array)
PEVENTINFO *npeventlist; // Event list (NULL-terminated array)
BYTE nDefProp; // Default property index
BYTE nDefEvent; // Default event index
BYTE nValueProp; // Value property index
USHORT usCtlVersion; // Control version (BCD, user-defined)
};
// -----------------------------------------------------------------------
// Utility macro: byte offset of a field within a structure
// -----------------------------------------------------------------------
#define OFFSETIN(type, field) ((BYTE)&(((type *)0)->field))
// -----------------------------------------------------------------------
// VB API function prototypes
//
// These functions are exported by the VB runtime (VBAPI module) and
// resolved at load time when VB loads the VBX.
// -----------------------------------------------------------------------
// Control registration
BOOL FAR PASCAL VBRegisterModel(HANDLE hmodule, MODEL FAR *lpmodel);
// Default control procedure
LONG FAR PASCAL VBDefControlProc(HCTL hctl, HWND hwnd, USHORT msg, USHORT wp, LONG lp);
// Event firing
ERR FAR PASCAL VBFireEvent(HCTL hctl, USHORT iEvent, LPVOID lpparams);
// String handle management
HSZ FAR PASCAL VBCreateHsz(_segment seg, LPSTR lpsz);
void FAR PASCAL VBDestroyHsz(HSZ hsz);
LPSTR FAR PASCAL VBDerefHsz(HSZ hsz);
// Long string handle management
HLSTR FAR PASCAL VBCreateHlstr(LPVOID lpdata, USHORT cbLen);
void FAR PASCAL VBDestroyHlstr(HLSTR hlstr);
LPSTR FAR PASCAL VBGetHlstr(HLSTR hlstr, USHORT FAR *lpcbLen);
ERR FAR PASCAL VBSetHlstr(HLSTR FAR *phlstr, LPVOID lpdata, USHORT cbLen);
// Control data access
LPVOID FAR PASCAL VBDerefControl(HCTL hctl);
// Runtime mode query (TRUE = runtime, FALSE = design)
BOOL FAR PASCAL VBGetMode(void);
// Control property access
ERR FAR PASCAL VBSetControlProperty(HCTL hctl, USHORT iProp, LONG data);
LONG FAR PASCAL VBGetControlProperty(HCTL hctl, USHORT iProp);
// Control window handle
HWND FAR PASCAL VBGetControlHwnd(HCTL hctl);
// Instance handle
HANDLE FAR PASCAL VBGetHInstance(void);
// -----------------------------------------------------------------------
// Restore default packing
// -----------------------------------------------------------------------
#pragma pack()
#endif // VBAPI_H