Why are accelerators for hidden controls still active?

Raymond Chen


In the suggestion box, Serge Wautier asked

why accelerators for hidden controls remain active
He’s apparently rather insistent because he

asked the question again a few months later
Asking the same question multiple times reduces the likelihood
that I’ll answer it.
Consider yourself lucky that I wrote this answer before I noticed
the duplicate; otherwise I would probably have skipped it.

Why are accelerators for hidden controls still active?
Very simple: Keyboard accessibility.

The dialog manager considers controls which indicate
that they want characters
to have no keyboard accelerator.
There are a lot of controls that fall into this category,
including such popular ones as edit controls,
combo boxes, and list boxes.
The traditional way of giving these “no accelerator” controls
an accelerator is to stick a static control on front of it
with the desired accelerator:

    LTEXT           "Ca&pacity:",IDC_STATIC,7,6,31,9
    COMBOBOX        IDC_CAPACITY,7,40,150,300,

But what if you don’t want a label to appear in front of
the control?
For example, the General property page of a file
begins with an unlabeled edit control that contains the name
of the file.
You might have a dialog that contains a list view that you don’t
want to label because its meaning is implied by other controls
on the page or by the page layout.

The answer is to hide the label control but leave it enabled.
This keeps the accelerator active,
allowing the user to press the accelerator to put focus
on the edit control or list view or whatever,
but removes the actual accelerator indicator from the screen.

This means that if you want to take a control off the dialog
because you don’t want the user to invoke it at all,
merely hiding it won’t be enough, since the accelerator is
still active.
In addition to hiding the control, you also have to disable it.
(Alternatively, you could destroy the control.)

Raymond Chen
Raymond Chen

Follow Raymond   


Comments are closed.