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