// 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 // ----------------------------------------------------------------------- // 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