290 lines
12 KiB
C
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
|