Изменить порядок, в котором программа чтения с экрана читает модальный диалог
Кто-нибудь имеет какие-либо знания относительно программ чтения с экрана и диалоговых окон 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, редактирование только для чтения". Я попытался изменить порядок в этом файле, что-либо после поля редактирования не выводится программой чтения с экрана.