Important: The information in this document is obsolete and should not be used for new development.
Summary of the Control Manager
Pascal Summary
Constants
CONST {control definition IDs} pushButProc = 0; {button} checkBoxProc = 1; {checkbox} radioButProc = 2; {radio button} useWFont = 8; {add to above to display control title in } { the window font} scrollBarProc = 16; {scroll bar} popupMenuProc = 1008; {pop-up menu} popupMenuCDEFproc = popupMenuProc; {synonym for compatibility} {pop-up menu CDEF variation codes} popupFixedWidth = $0001; {add to popupMenuProc to use } { fixed-width control} popupUseAddResMenu = $0004; {add to popupMenuProc to specify a } { value of type ResType in the } { contrlRfCon field of the control } { record; Menu Manager adds } { resources of this type to the menu} popupUseWFont = $0008; {add to popupMenuProc to show control } { title in the window font} {part codes} inButton = 10; {button} inCheckBox = 11; {checkbox or radio button} inUpButton = 20; {up arrow for a vertical scroll bar, } { left arrow for a horizontal scroll bar} inDownButton = 21; {down arrow for a vertical scroll bar, } { right arrow for a horizontal scroll bar} inPageUp = 22; {gray area above scroll box for a } { vertical scroll bar, gray area to } { left of scroll box for a horizontal } { scroll bar} inPageDown = 23; {gray area below scroll box for a } { vertical scroll bar, gray area to } { right of scroll box for a horizontal } { scroll bar} inThumb = 129; {scroll box (or other indicator)} {pop-up title characteristics} popupTitleBold = $00000100; {boldface font style} popupTitleItalic = $00000200; {italic font style} popupTitleUnderline = $00000400; {underline font style} popupTitleOutline = $00000800; {outline font style} popupTitleShadow = $00001000; {shadow font style} popupTitleCondense = $00002000; {condensed characters} popupTitleExtend = $00004000; {extended characters} popupTitleNoStyle = $00008000; {monostyled text} popupTitleLeftJust = $00000000; {place title left of pop-up box} popupTitleCenterJust = $00000001; {center title over pop-up box} popupTitleRightJust = $000000FF; {place title right of pop-up box} {axis constraints for DragControl procedure} noConstraint = 0; {no constraint} hAxisOnly = 1; {drag along horizontal axis only} vAxisOnly = 2; {drag along vertical axis only} {constants for the message parameter in a control definition function} drawCntl = 0; {draw the control or its part} testCntl = 1; {test where mouse button is pressed} calcCRgns = 2; {calculate region for control or indicator in } { 24-bit systems} initCntl = 3; {peform any additional control initialization} dispCntl = 4; {take any additional disposal actions} posCntl = 5; {move indicator and update its setting} thumbCntl = 6; {calculate parameters for dragging indicator} dragCntl = 7; {perform any custom dragging of control or } { its indicator} autoTrack = 8; {execute action procedure specified by your } { function} calcCntlRgn = 10; {calculate region for control} calcThumbRgn = 11; {calculate region for indicator} {part identifiers for ColorSpec records in a control color table resource} cFrameColor = 0; {frame color; for scroll bars, also fore- } { ground color for scroll arrows and gray area} cBodyColor = 1; {for scroll bars, background color for } { scroll arrows and gray area; for other } { controls, the fill color for body of control} cTextColor = 2; {text color; unused for scroll bars} cThumbColor = 3; {Reserved}Data Types
TYPE ControlPtr = ^ControlRecord; ControlHandle = ^ControlPtr; ControlRecord = PACKED RECORD nextControl: ControlHandle; {next control} contrlOwner: WindowPtr; {control's window} contrlRect: Rect; {rectangle} contrlVis: Byte; {255 if visible} contrlHilite: Byte; {highlight state} contrlValue: Integer; {control's current setting} contrlMin: Integer; {control's minimum setting} contrlMax: Integer; {control's maximum setting} contrlDefProc: Handle; {control definition function} contrlData: Handle; {data used by contrlDefProc} contrlAction: ProcPtr; {action procedure} contrlRfCon: LongInt; {control's reference value} contrlTitle: Str255; {control's title} END; AuxCtlPtr = ^AuxCtlRec; AuxCtlHandle = ^AuxCtlPtr; AuxCtlRec = RECORD acNext: AuxCtlHandle; {handle to next AuxCtlRec} acOwner: ControlHandle; {handle to this record's control} acCTable: CCTabHandle; {handle to color table record} acFlags: Integer; {reserved} acReserved: LongInt; {reserved for future use} acRefCon: LongInt; {for use by application} END; CCTabPtr = ^CtlCTab; CCTabHandle = ^CCTabPtr; CtlCTab = RECORD ccSeed: LongInt; {reserved; set to 0} ccRider: Integer; {reserved; set to 0} ctSize: Integer; {number of ColorSpec records in next } { field; 3 for standard controls} ctTable: ARRAY[0..3] OF ColorSpec; END;Control Manager Routines
Creating Controls
FUNCTION GetNewControl (controlID: Integer; owner: WindowPtr) : ControlHandle; FUNCTION NewControl (theWindow: WindowPtr; boundsRect: Rect; title: Str255; visible: Boolean; value: Integer; min: Integer; max: Integer; procID: Integer; refCon: LongInt) : ControlHandle;Drawing Controls
{UpdateControls is also spelled as UpdtControl} PROCEDURE ShowControl(theControl: ControlHandle); PROCEDURE UpdateControls(theWindow: WindowPtr; updateRgn: RgnHandle); PROCEDURE DrawControls (theWindow: WindowPtr); PROCEDURE Draw1Control(theControl: ControlHandle);Handling Mouse Events in Controls
FUNCTION FindControl (thePoint: Point; theWindow: WindowPtr; VAR theControl: ControlHandle): Integer; FUNCTION TrackControl (theControl: ControlHandle; thePoint: Point; actionProc: ProcPtr): Integer; FUNCTION TestControl(theControl: ControlHandle; thePt: Point) : Integer;Changing Control Settings and Display
{some routines have 2 spellings----see Table 5-1 for the alternate spellings} PROCEDURE SetControlValue (theControl: ControlHandle; theValue: Integer); PROCEDURE SetControlMinimum (theControl: ControlHandle; minValue: Integer); PROCEDURE SetControlMaximum (theControl: ControlHandle; maxValue: Integer); PROCEDURE SetControlTitle(theControl: ControlHandle; title: Str255); PROCEDURE HideControl(theControl: ControlHandle); PROCEDURE MoveControl (theControl: ControlHandle; h: Integer; v: Integer); PROCEDURE SizeControl(theControl: ControlHandle; w: Integer; h: Integer); PROCEDURE HiliteControl (theControl: ControlHandle; hiliteState: Integer); PROCEDURE DragControl (theControl: ControlHandle; startPt: Point; limitRect: Rect; slopRect: Rect; axis: Integer); PROCEDURE SetControlColor(theControl: ControlHandle; newColorTable: CCTabHandle); PROCEDURE SetControlAction(theControl: ControlHandle; actionProc: ProcPtr);Determining Control Values
{some routines have 2 spellings----see Table 5-1 for the alternate spellings} FUNCTION GetControlValue(theControl: ControlHandle): Integer; FUNCTION GetControlMinimum(theControl: ControlHandle): Integer; FUNCTION GetControlMaximum (theControl: ControlHandle): Integer; PROCEDURE GetControlTitle(theControl: ControlHandle; VAR title: Str255); FUNCTION GetControlReference (theControl: ControlHandle): LongInt; PROCEDURE SetControlReference (theControl: ControlHandle; data: LongInt); FUNCTION GetControlAction(theControl: ControlHandle): ProcPtr; FUNCTION GetControlVariant(theControl: ControlHandle): Integer; FUNCTION GetAuxiliaryControlRecord (theControl: ControlHandle; VAR acHndl: AuxCtlHandle): Boolean;Removing Controls
PROCEDURE DisposeControl(theControl: ControlHandle); PROCEDURE KillControls(theWindow: WindowPtr);Application-Defined Routines
Defining Your Own Control Definition Function
FUNCTION MyControl (varCode: Integer; theControl: ControlHandle; message: Integer; param: LongInt) : LongInt;Defining Your Own Action Procedures
PROCEDURE MyAction(theControl: ControlHandle; partCode: Integer); PROCEDURE MyIndicatorAction;C Summary
Constants
enum { /*control definition IDs*/ pushButProc = 0, /*button*/ checkBoxProc = 1, /*checkbox*/ radioButProc = 2, /*radio button*/ useWFont = 8, /*add to above to display control */ /* title in the window font*/ scrollBarProc = 16, /*scroll bar*/ popupMenuProc = 1008, /*pop-up menu*/ /*pop-up menu CDEF variation codes*/ popupFixedWidth = 1 << 0, /*add to popupMenuProc to use */ /* use fixed-width control*/ popupUseAddResMenu = 1 << 2, /*add to popupMenuProc to specify a */ /* value of type ResType in the */ /* contrlRfCon field of the control */ /* record; Menu Manager adds */ /* resources of this type to the menu*/ popupUseWFont = 1 << 3 /*add to popupMenuProc to display */ /* control title in the window font*/ }; enum { /*part codes*/ inButton = 10, /*button*/ inCheckBox = 11, /*checkbox or radio button*/ inUpButton = 20, /*up arrow for a vertical scroll bar, */ /* left arrow for a horizontal scroll bar*/ inDownButton = 21, /*down arrow for a vertical scroll bar, */ /* right arrow for a horizontal scroll bar*/ inPageUp = 22, /*gray area above scroll box for a */ /* vertical scroll bar, gray area to */ /* left of scroll box for a horizontal */ /* scroll bar*/ inPageDown = 23, /*gray area below scroll box for a */ /* vertical scroll bar, gray area to */ /* right of scroll box for a horizontal */ /* scroll bar*/ inThumb = 129 /*scroll box (or other indicator)*/ }; enum { /*pop-up title characteristics*/ popupTitleBold = 1 << 8, /*boldface font style*/ popupTitleItalic = 1 << 9, /*italic font style*/ popupTitleUnderline = 1 << 10, /*underline font style*/ popupTitleOutline = 1 << 11, /*outline font style*/ popupTitleShadow = 1 << 12, /*shadow font style*/ popupTitleCondense = 1 << 13, /*condensed text*/ popupTitleExtend = 1 << 14, /*extended text*/ popupTitleNoStyle = 1 << 15 /*monostyled text*/ }; enum { /*pop-up title characteristics*/ popupTitleLeftJust = 0x00000000, /*place title left of pop-up box*/ popupTitleCenterJust = 0x00000001, /*center title over pop-up box*/ popupTitleRightJust = 0x000000FF, /*place title right of pop-up box*/ /*axis constraints for DragControl procedure*/ noConstraint = 0, /*no constraint*/ hAxisOnly = 1, /*constrain movement to horizontal axis only*/ vAxisOnly = 2, /*constrain movement to vertical axis only*/ /*constants for the message parameter in a control definition function*/ drawCntl = 0, /*draw the control or control part*/ testCntl = 1, /*test where mouse button was pressed*/ calcCRgns = 2, /*calculate region for control or indicator in */ /* 24-bit systems*/ initCntl = 3, /*do any additional control initialization*/ dispCntl = 4, /*take any additional disposal actions*/ posCntl = 5, /*move indicator and update its setting*/ thumbCntl = 6, /*calculate parameters for dragging indicator*/ dragCntl = 7, /*peform any custom dragging of control or */ /* its indicator*/ autoTrack = 8, /*execute action procedure specified by your */ /* function*/ calcCntlRgn = 10, /*calculate region for control*/ calcThumbRgn = 11, /*calculate region for indicator*/ /*part identifiers for ColorSpec records in a control color table resource*/ cFrameColor = 0, /*frame color; for scroll bars, also foreground */ /* color for scroll arrows and gray area*/ cBodyColor = 1, /*for scroll bars, background color for scroll */ /* arrows and gray area; for other controls, */ /* the fill color for body of control*/ cTextColor = 2, /*text color; for scroll bars, unused*/ cThumbColor = 3 /*Reserved*/ };Data Types
struct ControlRecord { struct ControlRecord **nextControl; /*next control*/ WindowPtr contrlOwner; /*control's window*/ Rect contrlRect; /*rectangle*/ unsigned char contrlVis; /*255 if visible*/ unsigned char contrlHilite; /*highlight state*/ short contrlValue; /*control's current setting*/ short contrlMin; /*control's minimum setting*/ short contrlMax; /*control's maximum setting*/ Handle contrlDefProc; /*control definition function*/ Handle contrlData; /*data used by contrlDefProc*/ ProcPtr contrlAction; /*action procedure*/ long contrlRfCon; /*control's reference value*/ Str255 contrlTitle; /*control's title*/ }; typedef struct ControlRecord ControlRecord; typedef ControlRecord *ControlPtr, **ControlHandle; struct AuxCtlRec { Handle acNext; /*handle to next AuxCtlRec*/ ControlHandle acOwner; /*handle to this record's control*/ CCTabHandle acCTable; /*handle to color table record*/ short acFlags; /*reserved*/ long acReserved; /*reserved for future use*/ long acRefCon; /*for use by application*/ }; typedef struct AuxCtlRec AuxCtlRec; typedef AuxCtlRec *AuxCtlPtr, **AuxCtlHandle; struct CtlCTab { long ccSeed; /*reserved; set to 0*/ short ccRider; /*reserved; set to 0*/ short ctSize; /*number of ColorSpec records in next */ /* field; 3 for standard controls*/ ColorSpec ctTable[4]; }; typedef struct CtlCTab CtlCTab; typedef CtlCTab *CCTabPtr, **CCTabHandle;Control Manager Routines
Creating Controls
pascal ControlHandle GetNewControl (short controlID, WindowPtr owner); pascal ControlHandle NewControl (WindowPtr theWindow, const Rect *boundsRect, ConstStr255Param title, Boolean visible, short value, short min, short max, short procID, long refCon);Drawing Controls
/*UpdateControls is also spelled as UpdtControl*/ pascal void ShowControl(ControlHandle theControl); pascal void UpdateControls(WindowPtr theWindow, RgnHandle updateRgn); pascal void DrawControls(WindowPtr theWindow); pascal void Draw1Control(ControlHandle theControl);Handling Mouse Events in Controls
pascal short FindControl(Point thePoint, WindowPtr theWindow, ControlHandle *theControl); pascal short TrackControl(ControlHandle theControl, Point thePoint, ProcPtr actionProc); pascal short TestControl(ControlHandle theControl, Point thePt);Changing Control Settings and Display
/*some routines have 2 spellings----see Table 5-1 for the alternate spellings*/ pascal void SetControlValue(ControlHandle theControl, short theValue); pascal void SetControlMinimum (ControlHandle theControl, short minValue); pascal void SetControlMaximum (ControlHandle theControl, short maxValue); pascal void SetControlTitle(ControlHandle theControl, ConstStr255Param title); pascal void HideControl(ControlHandle theControl) pascal void MoveControl(ControlHandle theControl, short h, short v); pascal void SizeControl(ControlHandle theControl, short w, short h); pascal void HiliteControl(ControlHandle theControl, short hiliteState); pascal void DragControl(ControlHandle theControl, Point startPt, const Rect *limitRect, const Rect *slopRect, short axis); pascal void SetControlAction(ControlHandle theControl, ProcPtr actionProc) pascal void SetControlColor(ControlHandle theControl, CCTabHandle newColorTable);Determining Control Values
/*some routines have 2 spellings----see Table 5-1 for the alternate spellings*/ pascal short GetControlValue (ControlHandle theControl); pascal short GetControlMinimum (ControlHandle theControl); pascal short GetControlMaximum (ControlHandle theControl); pascal void GetControlTitle(ControlHandle theControl, Str255 title); pascal long GetControlReference (ControlHandle theControl); pascal void SetControlReference (ControlHandle theControl, long data); pascal ProcPtr GetControlAction (ControlHandle theControl); pascal short GetControlVariant (ControlHandle theControl); pascal Boolean GetAuxiliaryControlRecord (ControlHandle theControl, AuxCtlHandle *acHndl);Removing Controls
pascal void DisposeControl(ControlHandle theControl); pascal void KillControls(WindowPtr theWindow);Application-Defined Routines
Defining Your Own Control Definition Function
pascal long MyControl(short varCode, ControlHandle theControl, short message, long param);Defining Your Own Action Procedures
pascal void MyAction(ControlHandle theControl, short partCode); pascal void MyIndicatorAction;Assembly-Language Summary
Data Structures
ControlRecord Data Structure
0 nextControl
long handle to next control in control list 4 contrlOwner
long pointer to this control's window 8 contrlRect
8 bytes control's rectangle 16 contrlVis
1 byte value of 255 if control is visible 17 contrlHilite
1 byte highlight state 18 contrlValue
word control's current setting 20 contrlMin
word control's minimum setting 22 contrlMax
word control's maximum setting 24 contrlDefProc
long handle to control definition function 28 contrlData
long data used by control definition function 32 contrlAction
long address of action procedure 36 contrlRfCon
long control's reference value 40 contrlTitle
256 bytes control title (preceded by length byte) AuxCtlRec Data Structure
0 acNext long handle to next AuxCtlRec record in control list 4 acOwner long handle to this record's control 8 acCTable long handle to color table for this control 12 acFlags word miscellaneous flags 14 acReserved long reserved for use by Apple Computer, Inc. 18 acRefCon long for use by application Global Variables
AuxCtlHead First in a linked list of auxiliary control records AuxWinHead Contains a pointer to the linked list of auxiliary control records DragHook Address of procedure to execute during TrackControl
andDragControl
DragPattern Pattern of dragged region's outline (8 bytes)