WinComm/vbx/vbapi.h

290 lines
12 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
// -----------------------------------------------------------------------
#ifndef USHORT
typedef unsigned short USHORT;
#endif
typedef LPVOID HCTL; // Handle to a VBX control instance
typedef LPSTR HSZ; // Handle to a VB-managed string
typedef LPVOID HLSTR; // Handle to a VB long string
typedef USHORT ERR; // Error code
// Flag type
typedef DWORD FL;
// -----------------------------------------------------------------------
// Forward declarations and pointer types
// -----------------------------------------------------------------------
typedef struct tagMODEL MODEL;
typedef struct tagPROPINFO PROPINFO;
typedef struct tagEVENTINFO EVENTINFO;
typedef MODEL FAR *LPMODEL;
typedef PROPINFO *PPROPINFO; // Near pointer (DLL data segment)
typedef EVENTINFO *PEVENTINFO; // 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_fSetCheck 0x00008000L
#define PF_fSaveData 0x00010000L
#define PF_fSaveMsg 0x00020000L
#define PF_fGetHszMsg 0x00040000L
#define PF_fUpdateOnEdit 0x00080000L
#define PF_fEditable 0x00100000L
#define PF_fPreHwnd 0x00200000L
#define PF_fDefVal 0x00400000L
#define PF_fNoInitDef 0x00800000L
#define PF_fNoRuntimeR 0x02000000L
#define PF_fNoMultiSelect 0x04000000L
#define PF_fLoadDataOnly 0x20010000L
#define PF_fLoadMsgOnly 0x20020000L
// -----------------------------------------------------------------------
// MODEL flags
// -----------------------------------------------------------------------
#define MODEL_fArrows 0x00000001L
#define MODEL_fFocusOk 0x00000002L
#define MODEL_fMnemonic 0x00000004L
#define MODEL_fChildrenOk 0x00000008L
#define MODEL_fInitMsg 0x00000010L
#define MODEL_fLoadMsg 0x00000020L
#define MODEL_fDesInteract 0x00000040L
#define MODEL_fInvisAtRun 0x00000080L
#define MODEL_fGraphical 0x00000100L
// -----------------------------------------------------------------------
// VBX control messages
// -----------------------------------------------------------------------
#define VBM__BASE (WM_USER + 0x0C00)
#define VBM_CREATED (VBM__BASE + 0x00)
#define VBM_LOADED (VBM__BASE + 0x01)
#define VBM_INITIALIZE (VBM__BASE + 0x02)
#define VBM_GETPROPERTY (VBM__BASE + 0x03)
#define VBM_CHECKPROPERTY (VBM__BASE + 0x04)
#define VBM_SETPROPERTY (VBM__BASE + 0x05)
#define VBM_SAVEPROPERTY (VBM__BASE + 0x06)
#define VBM_LOADPROPERTY (VBM__BASE + 0x07)
#define VBM_MNEMONIC (VBM__BASE + 0x0D)
#define VBM_METHOD (VBM__BASE + 0x11)
// -----------------------------------------------------------------------
// 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 indices
// -----------------------------------------------------------------------
#define IPROP_STD_NAME 0x0000
#define IPROP_STD_CTLNAME IPROP_STD_NAME
#define IPROP_STD_INDEX 0x0001
#define IPROP_STD_HWND 0x0002
#define IPROP_STD_BACKCOLOR 0x0003
#define IPROP_STD_FORECOLOR 0x0004
#define IPROP_STD_LEFT 0x0005
#define IPROP_STD_TOP 0x0006
#define IPROP_STD_WIDTH 0x0007
#define IPROP_STD_HEIGHT 0x0008
#define IPROP_STD_ENABLED 0x0009
#define IPROP_STD_VISIBLE 0x000A
#define IPROP_STD_PARENT 0x0014
#define IPROP_STD_DRAGMODE 0x0015
#define IPROP_STD_DRAGICON 0x0016
#define IPROP_STD_TAG 0x0019
#define IPROP_STD_NONE 0x001E
// -----------------------------------------------------------------------
// Standard property pointers
//
// Magic sentinel values recognized by VB as built-in properties.
// Uses bitwise NOT of standard property index.
// -----------------------------------------------------------------------
#define PPROPINFO_STD_NAME ((PPROPINFO)~IPROP_STD_NAME)
#define PPROPINFO_STD_CTLNAME ((PPROPINFO)~IPROP_STD_CTLNAME)
#define PPROPINFO_STD_INDEX ((PPROPINFO)~IPROP_STD_INDEX)
#define PPROPINFO_STD_HWND ((PPROPINFO)~IPROP_STD_HWND)
#define PPROPINFO_STD_LEFT ((PPROPINFO)~IPROP_STD_LEFT)
#define PPROPINFO_STD_TOP ((PPROPINFO)~IPROP_STD_TOP)
#define PPROPINFO_STD_WIDTH ((PPROPINFO)~IPROP_STD_WIDTH)
#define PPROPINFO_STD_HEIGHT ((PPROPINFO)~IPROP_STD_HEIGHT)
#define PPROPINFO_STD_ENABLED ((PPROPINFO)~IPROP_STD_ENABLED)
#define PPROPINFO_STD_VISIBLE ((PPROPINFO)~IPROP_STD_VISIBLE)
#define PPROPINFO_STD_PARENT ((PPROPINFO)~IPROP_STD_PARENT)
#define PPROPINFO_STD_DRAGMODE ((PPROPINFO)~IPROP_STD_DRAGMODE)
#define PPROPINFO_STD_DRAGICON ((PPROPINFO)~IPROP_STD_DRAGICON)
#define PPROPINFO_STD_TAG ((PPROPINFO)~IPROP_STD_TAG)
#define PPROPINFO_STD_NONE ((PPROPINFO)~IPROP_STD_NONE)
// -----------------------------------------------------------------------
// 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
};
// -----------------------------------------------------------------------
// EVENTINFO - Event descriptor
// -----------------------------------------------------------------------
struct tagEVENTINFO {
PSTR npszName; // Event name
USHORT cParms; // Number of parameters
USHORT cwParms; // Size of parameters in words
PWORD npParmTypes; // Parameter type list (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
FL 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)
};
// -----------------------------------------------------------------------
// MODELINFO - Returned by VBGetModelInfo (VB4+ model discovery)
// -----------------------------------------------------------------------
typedef struct tagMODELINFO {
USHORT usVersion; // VB_VERSION
LPMODEL FAR *lplpmodel; // Null-terminated list of LPMODEL
} MODELINFO;
typedef MODELINFO FAR *LPMODELINFO;
// -----------------------------------------------------------------------
// 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(HANDLE seg, LPSTR lpsz);
HSZ 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);
USHORT FAR PASCAL VBGetHlstr(HLSTR hlstr, LPVOID pb, USHORT cbLen);
ERR FAR PASCAL VBSetHlstr(HLSTR FAR *phlstr, LPVOID lpdata, USHORT cbLen);
// Control data access
LPVOID FAR PASCAL VBDerefControl(HCTL hctl);
// Runtime mode query (MODE_DESIGN=1, MODE_RUN=2, MODE_BREAK=3)
USHORT FAR PASCAL VBGetMode(void);
// Control property access
ERR FAR PASCAL VBSetControlProperty(HCTL hctl, USHORT iProp, LONG data);
ERR FAR PASCAL VBGetControlProperty(HCTL hctl, USHORT iProp, LPVOID pdata);
// Control window handle
HWND FAR PASCAL VBGetControlHwnd(HCTL hctl);
// Instance handle
HANDLE FAR PASCAL VBGetHInstance(void);
// Runtime version
USHORT FAR PASCAL VBGetVersion(void);
// -----------------------------------------------------------------------
// Restore default packing
// -----------------------------------------------------------------------
#pragma pack()
#endif // VBAPI_H