Reference Manual

  • 15.0
  • 07/23/2021
  • Public Content
Contents

Using Dialog Callback Routines

All callback routines should have the following interface:
SUBROUTINE callback ( dlg, control_name, callbacktype) !DEC$ ATTRIBUTES DEFAULT:callback-routine-name
Where:
dlg
Refers to the dialog box and allows the callback to change values of the dialog controls.
control_name
Is the name of the control that caused the callback.
callbacktype
Indicates what callback is occurring (for example,
DLG_CLICKED
,
DLG_CHANGE
,
DLG_DBLCLICK
).
In the !DEC$
ATTRIBUTES
directive, the
callback-routine-name
is the name of the callback routine.
The last two arguments let you write a single subroutine that can be used with multiple callbacks from more than one control. Typically, you do this for controls comprising a logical group. For example, all the controls in the temperature dialog in the TEMP example are associated with the same callback routine,
UpdateTemp
. You can also associate more than one callback routine with the same control, but you must then provide an index parameter to indicate which callback is to be used.
The following is an example of a callback routine:
SUBROUTINE UpdateTemp( dlg, control_name, callbacktype ) !DEC$ ATTRIBUTES DEFAULT:UpdateTemp USE IFLOGM IMPLICIT NONE TYPE (dialog) dlg INTEGER control_name INTEGER callbacktype INCLUDE 'RESOURCE.FD' CHARACTER(256) text INTEGER cel, far, retint LOGICAL retlog ! Suppress compiler warnings for unreferenced arguments. INTEGER local_callbacktype local_callbacktype = callbacktype SELECT CASE (control_name) CASE (IDC_EDIT_CELSIUS) ! Celsius value was modified by the user so ! update both Fahrenheit and Scroll bar values. retlog = DlgGet( dlg, IDC_EDIT_CELSIUS, text ) READ (text, *, iostat=retint) cel IF ( retint .eq. 0 ) THEN far = (cel-0.0)*((212.0-32.0)/100.0)+32.0 WRITE (text,*) far retlog = DlgSet( dlg, IDC_EDIT_FAHRENHEIT, & & TRIM(ADJUSTL(text)) ) retlog = DlgSet( dlg, IDC_SCROLLBAR_TEMPERATURE, cel, & & DLG_POSITION ) END IF CASE (IDC_EDIT_FAHRENHEIT) ! Fahrenheit value was modified by the user so ! update both celsius and Scroll bar values. retlog = DlgGet( dlg, IDC_EDIT_FAHRENHEIT, text ) READ (text, *, iostat=retint) far IF ( retint .eq. 0 ) THEN cel = (far-32.0)*(100.0/(212.0-32.0))+0.0 WRITE (text,*) cel retlog = DlgSet( dlg, IDC_EDIT_CELSIUS, TRIM(ADJUSTL(text)) ) retlog = DlgSet( dlg, IDC_SCROLLBAR_TEMPERATURE, cel, & & DLG_POSITION ) END IF CASE (IDC_SCROLLBAR_TEMPERATURE) ! Scroll bar value was modified by the user so ! update both Celsius and Fahrenheit values. retlog = DlgGet( dlg, IDC_SCROLLBAR_TEMPERATURE, cel, & & DLG_POSITION ) far = (cel-0.0)*((212.0-32.0)/100.0)+32.0 WRITE (text,*) far retlog = DlgSet( dlg, IDC_EDIT_FAHRENHEIT, TRIM(ADJUSTL(text)) ) WRITE (text,*) cel retlog = DlgSet( dlg, IDC_EDIT_CELSIUS, TRIM(ADJUSTL(text)) ) END SELECT END SUBROUTINE UpdateTemp
Each control in a dialog box, except a pushbutton, has a default callback that performs no action. The default callback for a pushbutton's click event sets the return value of the dialog to the pushbutton's name and then exits the dialog. This makes all pushbuttons exit the dialog by default, and gives the OK and CANCEL buttons good default behavior. A routine that calls
DLGMODAL
can then test to see which pushbutton caused the modal dialog to exit.
Callbacks for a particular control are called after the value of the control has been changed by the user's action. Calling
DLGSET
does not cause a callback to be called for the changing value of a control. In particular, when inside a callback, performing a
DLGSET
on a control will not cause the associated callback for that control to be called.
Calling
DLGSET
before or after
DLGMODELESS
or
DLGMODAL
has been called also does not cause the callback to be called. If the callback needs to be called, it can be called manually using
CALL
after the
DLGSET
is performed.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.