Category: API Functions

Date: 02-16-2022

Return to Index

'Perhaps one of the most used functions, there are several ways to write
'it, depending on what information you start with. PowerBASIC comes with
'a replacement "Control Send".  SendMessage requires the handle of a control,
'whereas Control Send allows you to input the dialog handle and the control ID,
'both of which are usually conveniently available.  Both also differ in how the
'return value is handled.
SendMessage hWnd, Msg, wParam, lParam    'M, w, l is used below to shorten the text
'All of the various ways to write a message vary by how hWnd, which can be a
'dialog handle or child control handle, is retrieved.  You choose the Msg you want
'to send, which defines the wParam and lParam values to use.
'Here are many of the ways in which a handle or control ID can be retrieved:
'Getting Dialog handle
hDialog = hDlg                   'hDlg was assigned during Dialog New ... TO hDlg
hDialog = CB.Hndl                'in Callback, CB.Hndl is available
hDialog = GetFocus               'if dialog has no child, focus is with the dialog
hDialog = GetParent(hControl)    'dialog is parent of child that has focus
hDialog = GetParent(GetFocus)    'dialog is parent of child that has focus
'Getting Control handle
hControl = GetFocus                           'if child control has focus
hControl = GetDlgItem(hDlg, %ID_Control)      'GetDlgItem returns control handle
hControl = GetDlgItem(CB.Hndl, %ID_Control)   'in Callback where CB.Hndl is valid
hControl = GetDlgItem(CB.Hndl, CB.Ctl)        'in Callback, %WM_Command where CB.ctl is valid
hControl = GetDlgItem(CB.Hndl, CB.wParam)     'some messages put Ctl ID in wParam or lParam (or in Hi/Lo word)
hControl = GetDlgItem(CB.Hndl, CB.lParam)     'some messages put Ctl ID in wParam or lParam (or in Hi/Lo word)
hControl = CB.lParam                          'some messages put Ctl handle in wParam or lParam (or in Hi/Lo word)
hControl = CB.wParam                          'some messages put Ctl handle in wParam or lParam (or in Hi/Lo word)
hControl = Lo(Word,CB.wParam)                 'some messages put Ctl ID in Hi/Lo word of wParam
hControl = Lo(Word,CB.lParam)                 'some messages put Ctl ID in Hi/Lo word of lParam
hControl = APIFunction()                      'some API return the control handle
Control Handle hDlg, %ID_Control TO hControl         '%ID_Control is assigned with Control Add statement
Control Handle hDlg, CB.Ctl TO hControl              'in Callback, with %WM_Command then CB.Ctl is valid
Control Handle hDlg, CB.wParam TO hControl           'in Callback, some messages put Control ID in wParam
Control Handle hDlg, CB.lParam TO hControl           'in Callback, some messages put Control ID in lParam
Control Handle hDlg, Lo(Word,CB.wParam) TO hControl  'in Callback, some message put CtlID in Hi/Lo word of wParm
Control Handle hDlg, Lo(Word,CB.lParam) TO hControl  'in Callback, some message put CtlID in Hi/Lo word of lParm
'Getting Control ID
ControlID = %ID_Control               'as assigned by the Control Add statement
ControlID = GetDlgCtrlID(hControl)    'GetDlgCtrlID returns Control ID from control handle.
ControlID = CB.Ctl                    'in Callback, with %WM_Command then CB.Ctl is valid
ControlID = CB.wParam                 'in Callback, some messages put Control ID in wParam
ControlID = CB.lParam                 'in Callback, some messages put Control ID in lParam
ControlID = Lo(Word,CB.wParam)        'in Callback, some messages put CtlID in Hi/Lo word of wParm
ControlID = Lo(Word,CB.lParam)        'in Callback, some messages put CtlID in Hi/Lo word of lParm
'Primary Code:
'These are a few examples of how the above code is used to send messages (SDK and DDT examples)
SendMessage hDlg, M, w, l                             'if you know the handle to the receiving dialog
SendMessage hControl, M, w, l                         'receiving window can also be a control
SendMessage GetDlgItem(hDlg, %ID_Control), M, w, l    'GetDlgItem returns control handle
SendMessage GetDlgItem(hDlg, CB.Ctl), M, w, l         'in Callback, within WM_Command (so CB.Ctl is valid)
SendMessage GetDlgItem(hDlg, CB.wParam, M, w, l       'in Callback, some message provide CtrlID in wParam/lParam
Control Send hDlg, %ID_Control, M, w, l           'all messages, if hDlg is defined (usually as Global)
Control Send CB.Hndl, %ID_Control, M, w, l        'in Callback, all messages
Control Send CB.Hndl, CB.lParam, M, w, l          'in Callback, some message provide CtrlID in wParam/lParam
Control Send CB.Hndl, CB.Ctl, M, w, l             'in Callback, with WM_Command (so CB.Ctl is valid)
'Date: 03-10-2012

created by gbSnippets