Изменить порядок, в котором программа чтения с экрана читает модальный диалог

Кто-нибудь имеет какие-либо знания относительно программ чтения с экрана и диалоговых окон Windows? В частности, как заставить программу чтения с экрана читать диалоговые элементы управления в определенном порядке. Этот порядок должен быть определен во время выполнения, поскольку реальные элементы управления диалогом добавляются динамически в зависимости от типа отображаемого диалога.

Заметка

Я использую простое диалоговое окно приложения Win32. Небольшой пример, в котором мне удалось воспроизвести мою проблему, - это пустое приложение Win32 с использованием стандартного диалогового окна "О программе".

Фон

Мне необходимо обновить существующее всплывающее диалоговое окно, чтобы для тех пользователей, которым требуется программа для чтения с экрана, оно было правильно интерпретировано и понято. В настоящий момент программа чтения с экрана читает информацию в запутанном порядке, что затрудняет понимание слабовидящими пользователями того, что требуется для продолжения.

Проблема подробно

Я не могу обновить z-порядок элементов управления в диалоговом окне, чтобы изменить порядок, в котором программа чтения с экрана будет их читать.

Насколько я понимаю, я должен обновить порядок вкладок (z-порядок) элементов управления в диалоговом окне, так как это порядок, с которым программа чтения с экрана будет читать информацию (не стесняйтесь исправлять меня в этом пункте, если я далеко от цели здесь).

Многие предложения в Интернете предлагают использовать либо функцию SetWindowPos, либо функции DeferWindowPos. К сожалению, я не могу заставить их работать должным образом.

В моем "базовом" тестовом диалоговом окне определены следующие элементы управления;

HWND ctrl_StaticText1 = GetDlgItem(hDlg, IDC_STATIC_1);
HWND ctrl_StaticText2 = GetDlgItem(hDlg, IDC_STATIC_2);
HWND ctrl_StaticText3 = GetDlgItem(hDlg, IDC_STATIC_3);

HWND ctrl_Edit1 = GetDlgItem(hDlg, IDC_EDIT_1);
HWND ctrl_Edit2 = GetDlgItem(hDlg, IDC_EDIT_2);

HWND ctrl_Pict1 = GetDlgItem(hDlg, IDC_PICT_1);

HWND ctrl_ButtonOk = GetDlgItem(hDlg, IDOK);

Затем я попытался установить z-порядок следующим образом;

HDWP windowPos = BeginDeferWindowPos(7);

windowPos = DeferWindowPos(windowPos, ctrl_StaticText1, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
windowPos = DeferWindowPos(windowPos, ctrl_StaticText2, ctrl_StaticText1, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
windowPos = DeferWindowPos(windowPos, ctrl_StaticText3, ctrl_StaticText2, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

windowPos = DeferWindowPos(windowPos, ctrl_Edit1, ctrl_StaticText3, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
windowPos = DeferWindowPos(windowPos, ctrl_Edit2, ctrl_Edit1, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

windowPos = DeferWindowPos(windowPos, ctrl_Pict1, ctrl_Edit2, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

windowPos = DeferWindowPos(windowPos, ctrl_ButtonOk, ctrl_Pict1, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

EndDeferWindowPos(windowPos);

При открытии диалогового окна программа чтения с экрана говорит "статический текст 1, статический текст 3, редактирование только для чтения" (поле редактирования только для чтения - ctrl_Edit1, ctrl_Edit2 - не только для чтения).

Примечание

Когда диалоговое окно просто содержало несколько статических текстовых элементов управления, эта функция, казалось, работала правильно, только когда я начал добавлять более "сложные" элементы управления, такие как поля редактирования и элементы управления рисунками, возникли проблемы.

Спасибо за любую помощь:)

редактировать

Как и было запрошено, ниже находится файл.rc (я предположил, что интерес представляет только секция управления диалогами).

IDD_ABOUTBOX DIALOGEX 0, 0, 349, 190
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    LTEXT           "Static text 1",IDC_STATIC_1,35,25,40,8,NOT WS_GROUP
    LTEXT           "Static text 2",IDC_STATIC_2,33,55,40,8,NOT WS_GROUP
    LTEXT           "Static text 3",IDC_STATIC_3,173,52,40,8,NOT WS_VISIBLE | NOT WS_GROUP
    DEFPUSHBUTTON   "OK",IDOK,292,169,50,14
    EDITTEXT        IDC_EDIT_1, 72, 95, 55, 14, ES_AUTOHSCROLL | ES_READONLY
    CONTROL         "",IDC_PICT_1,"Static",SS_BLACKFRAME,138,92,20,20
    EDITTEXT        IDC_EDIT_2, 174, 95, 40, 14, ES_AUTOHSCROLLs
END

Обратите внимание, что во время тестирования я вносил некоторые изменения, поэтому в приведенном выше файле вывод программы чтения с экрана теперь стал "статический текст 1, статический текст 2, статический текст 3, редактирование только для чтения". Я попытался изменить порядок в этом файле, что-либо после поля редактирования не выводится программой чтения с экрана.

0 ответов

Другие вопросы по тегам