266 lines
11 KiB
C
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
|